如何通过JPA级联检索实体的Id

时间:2008-12-05 22:51:05

标签: jpa cascade

如果有一个普通的Foo实体并且调用persist(foo),则会在该实体上自动设置@Id。 但是,如果所述Foo实体具有通过

绑定到它的Bars集合
(...)
@OneToMany(cascade=Cascade.ALL) 
Set<Bar> getBars()
(...)

并且这样的实例已经存在,如果创建一个新的Bar并将其添加到foo的Bars集合并调用merge(foo),那么刚创建的Bar会被保留,但它的@Id不会更新!

有没有办法检索这个id,而不需要稍后调用find(Foo.class,foo.getId())?

1 个答案:

答案 0 :(得分:0)

对merge()的调用不会更新传入的对象。但是它将返回更新的对象。

来自Hibernate文档:

http://www.hibernate.org/hib_docs/v3/reference/en/html/objectstate-saveorupdate.html

和merge()非常不同:

  • 如果存在具有当前与会话关联的相同标识符的持久性实例,则将给定对象的状态复制到持久性实例
  • 如果当前没有与会话关联的持久性实例,请尝试从数据库加载它,或者创建新的持久性实例
  • 返回持久化实例
  • 给定的实例没有与会话关联,它仍然是分离的