2015-09-07 102 views
1

我在我的代碼中發生了一件奇怪的事情。Hibernate:session.merge做插入而不是更新?

我已經使用session.merge更新主表應更新子表。但對於我在主表更新後,我的子表正在創建一個新的記錄,我需要解決。請指導。哪裏可以解決問題?它可以是實體文件嗎?

請找到下面的代碼。

public void update(List print) throws DataAccessException { 
     try { 
      if (print != null && print.size() > 0) 
       for (Object object : print) { 
        entityManager.merge(object); 
       } 
     } catch (HibernateException e) { 
      throw new DataAccessException("HibernateException"); 
     } 
    } 
+0

這是一個持久對象嗎?它有一個有效的'ID'? – meskobalazs

+0

是啊打印是一個持久對象(引用主表),並與它我有需要更新的子表。 – Luxy

+1

你可以添加相關的實體類嗎? – meskobalazs

回答

1

我已經能夠解決這個問題。 我通過將orphanRemoval屬性添加到我的變量來解決此問題。由於沒有orphanRemoval屬性,它不會刪除較早的屬性,所以我在我的應用程序中收到了錯誤的數據。以下是更正後的代碼。

@OneToMany(mappedBy = "printColor", fetch = FetchType.LAZY, cascade= {CascadeType.ALL}, orphanRemoval=true) 
private Set<PrintColorFormatter> printColorSets; 
相關問題