2012-10-01 40 views
0

我是Hibernate的新手,開發一個從URL獲取參數的servlet,創建一個Hibernate對象,然後將其存儲到MySQL數據庫中。同時向MySQL添加Hibernate對象

我正在同時發送1000個URL。當我查看MySQL表時,它只將最後一個對象添加到數據庫中。

doGet方法:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    // TODO Auto-generated method stub 

    //HttpSession session = request.getSession(true); 
    //session.putValue("uid", count); 

    String id = request.getParameter("id"); 
    String url = request.getParameter("url"); 
    String lastVisitTime = request.getParameter("lastVisitTime"); 
    String visitCount = request.getParameter("visitCount"); 
    String title = request.getParameter("title"); 
    String typedCount = request.getParameter("typedCount"); 

    HistoryItem hi = new HistoryItem(id, url, lastVisitTime, visitCount, title, typedCount); 

    File f = new File("C:\\Users\\atılay\\Desktop\\apache-tomcat-7.0.30-windows-x64\\jspservlets\\UserModeling\\src\\hibernate.cfg.xml"); 

    SessionFactory sessionFactory = new Configuration().configure(f).buildSessionFactory(); 
    Session session = sessionFactory.openSession(); 
    session.beginTransaction(); 
    session.save(hi); 
    session.getTransaction().commit(); 
    session.flush(); 
    session.close(); 

} 

HistoryItem:

public class HistoryItem { 

@Id @GeneratedValue(strategy=GenerationType.IDENTITY) 
@Basic(optional = false) 
private int i; 
private String id = ""; 
private String url = ""; 
private String lastVisitTime = ""; 
private String visitCount = ""; 
private String title = ""; 
private String typedCount = ""; 
} 

問題是什麼?我找不到任何解決方案。

回答

0

如果您要創建要保存到數據庫中的對象/實體,則不應將其設置爲ID。

當保存對象時會分配ID - 這是Hibernate的責任。 ID已經設置,意味着HB認爲該對象已被保存。

真的,這不是一個很好的問題,或編碼風格,或例子。

'同時發送1000個URL'。那是什麼意思?您一次打開1000個瀏覽器,並同時發送來自所有瀏覽器的請求?說話的感覺。

您的SessionFactory應該保存在webapp或servlet中。此代碼正在爲每個頁面請求執行整個Hibernate啓動&初始化。

File f = new File("C:\\Users\\atılay\\Desktop\\apache-tomcat-7.0.30-windows-x64\\jspservlets\\UserModeling\\src\\hibernate.cfg.xml"); 

SessionFactory sessionFactory = new Configuration().configure(f).buildSessionFactory(); 

擺脫「ID」作爲參數 - 否則有選擇地使用它,加載&編輯記錄 - 並且妥善做好休眠設置。

然後你的項目可能會工作。