Hibernate无法更新对象

时间:2015-08-18 06:44:49

标签: java hibernate jpa

我正在使用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

1 个答案:

答案 0 :(得分:0)

我认为如果你想第一次坚持一个实体,使用'persist'而不是'merge'会更清楚。

在您的示例中,不需要两次调用'merge',因为您从第一次合并中获取了一个托管实体,并且您正在更改从合并中返回的实体,您的更改将在您的事务提交时自动保留。 / p>