我正在使用hibernate的EntityManager来保存对象然后更新它。我的代码看起来像:
wc
E级的Id是使用@PrePersist生成的。
hibernate日志看起来像:
@PersistenceContext(unitName = "demoPU")
private EntityManager em;
E e = new E();
e.setDescription("Description");
e = em.merge(e);
em.flush();
e.setDescription("newDescription");
e = em.merge(e);
em.flush();
所以基本上hibernate试图用相同的ID插入相同的对象两次。这反过来又给出了以下例外:
Hibernate: insert into E (Description, ID) values (?, ?, ?)
Hibernate: insert into E (Description, ID) values (?, ?, ?)
有人能让我知道为什么hibernate运行org.hsqldb.HsqlException: integrity constraint violation: unique constraint or index violation; SYS_PK_10253 table: POLICY
语句而不是insert
,即使我使用实体管理器update
来保存和更新对象?另外,在这种情况下,如何实际更新对象?
编辑:E类看起来像:
merge
答案 0 :(得分:0)
我认为如果你想第一次坚持一个实体,使用'persist'而不是'merge'会更清楚。
在您的示例中,不需要两次调用'merge',因为您从第一次合并中获取了一个托管实体,并且您正在更改从合并中返回的实体,您的更改将在您的事务提交时自动保留。 / p>