2008-12-05 49 views
1

级联存留的实体的Id如果有一个常规Foo实体并调用persist(foo),则会在该实体上自动设置@Id。 但是,如果说富实体通过如何检索与JPA

(...) 
@OneToMany(cascade=Cascade.ALL) 
Set<Bar> getBars() 
(...) 

上绑定了酒吧的集合,这样的实例已经坚持着,如果创建一个新的酒吧,并把它添加到foo的酒吧收集和调用合并( foo)刚创建的Bar是持久的,但它的@Id没有更新!

有没有一种方法来检索此ID,而不需要稍后调用find(Foo.class,foo.getId())?

回答

0

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

从Hibernate文档:

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

和合并()有很大的不同:

  • 如果存在与当前与会话相关联的相同标识符的持久化实例,复制给定对象的状态转移到持久实例上
  • 如果当前没有与会话关联的持久实例,请尝试从数据库加载它,o [R创建一个新的持久化实例
  • 持久实例返回
  • 给定的对象没有被关联到session上,它
+0

所以,我怎么能更新这些对象仍然超脱? – user43845 2008-12-06 19:09:44