2

如果一个人有一个常规的 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())?

4

1 回答 1

0

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

从休眠文档:

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

和 merge() 非常不同:

  • 如果存在与当前会话关联的具有相同标识符的持久实例,则将给定对象的状态复制到持久实例上
  • 如果当前没有与会话关联的持久化实例,尝试从数据库中加载它,或者创建一个新的持久化实例
  • 返回持久实例
  • 给定的实例没有与会话关联,它保持分离
于 2008-12-05T23:02:12.817 回答