2015-09-07 119 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; 
相关问题