2011-05-21 58 views
0

我試圖做對象的一些大名單使用Hibernate對象保存的龐大名單..以節約大量的時間

問題是儲蓄,我需要確認是否有相同的字段數據的記錄已經存在,如果是前然後需要獲取其ID,並創建另一個表關聯..否則使關聯表相同的新條目和一個新的插入..

請指導我怎樣才能提高節約時間..

以下是如何完成保存..

Session session = SchemaManager.getDatabaseSession("com.server.domin.PublicaccountBehavior"); 
    try { 
     List<Post> posts = this.getAllPosts(); 
     Transaction transaction = session.beginTransaction(); 
     for (Post post : posts) { 
      Behavior behavior = new Behavior(); 
      behavior.setElementValue(val); 
      behavior.setIsDeleted(false); 
      Date now = new Date(); 
      behavior.setCreatedOn(now); 
      behavior.setModifiedOn(now); 
      PublicaccountType type = new PublicaccountType(); 
      type.setId(3L); 
      behavior.setPublicaccountType(type); 

      PublicaccountBehavior publicaccountBehavior = new PublicaccountBehavior(); 
      publicaccountBehavior.setBehavior(behavior); 
      publicaccountBehavior.setPublicAccount(account); 
      publicaccountBehavior.setTimeOfBookmark(post.getTimeAsDate()); 
      publicaccountBehavior.setCreatedOn(now); 
      publicaccountBehavior.setModifiedOn(now); 
      try { 

       Behavior behav; 
       List list2 = session.createQuery("from Behavior where elementValue = :elementVal").setString("elementVal", 
         behavior.getElementValue()).list(); 
       if (list2.size() > 0) { 
        behav = (Behavior) list2.get(0); 
        publicaccountBehavior.setBehavior(behav); 
       } else { 
        Long id = (Long) session.save(behavior); 
        behavior.setId(id); 
        publicaccountBehavior.setBehavior(behavior); 
       } 
       session.saveOrUpdate(publicaccountBehavior); 

      } catch (HibernateException e) { 
       e.printStackTrace(); 
      } 
     } 
     transaction.commit(); 

回答

1

當您保存一個新對象時 - flush()然後清除()會話以控制第一級緩存的大小。這將提高性能。

例子在hibernate docs中解釋。

+0

謝謝..對於回覆falcon ..我試試這個並檢查性能.. – komal 2011-05-23 07:24:44