持久化具有/不具有已分离的GeneratedValue ID的实体时EntityManager的行为

时间:2015-02-10 20:18:37

标签: java hibernate jpa

我希望有人回答以下不同情况的javax.persistence.EntityManager.persist()的行为:

(如果其中一些案件减少到同一个案件,请同样说明;如果我隐含地减少到一个案件的某些案件(即案件c)应该因行为不同而分开,也请说出来)

我坚持的对象:

a)已分离,并且已经设置了@GeneratedValue @Id字段,并且持久化上下文/数据库中存在具有相同ID的实体。

b)已分离且已经设置了@GeneratedValue @Id字段,但持久化上下文/数据库中不存在具有相同ID的实体。

c)是否已分离,但其@GeneratedValue @Id字段尚未设置。

d)已分离,但其主键未自动生成,并且已设置。

1 个答案:

答案 0 :(得分:0)

我已经找到了所有案例的答案:

a)它将抛出一个EntityExistsException。

b)它将忽略值集,并在将实体刷新到数据库时设置自己生成的值。

c)与b相同。

d)只有当PersistenceContext中没有对象具有相同的主键时,它才会持久存在,否则,它将抛出一个EntityExistsException,如在。

中。