2008-12-05 27 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