2011-07-07 43 views
0

我在兩個休眠實體之間有一個m2m關係,我們稱之爲Movies和Actor,我已經使用雙向鏈接進行設置。顯然,這被建模爲一個電影表,演員表,以及在db中兩個外鍵的連接表。有效地更新休眠實體之間的關係

該UI可讓您更新演員和電影之間的關係。在內部,用戶界面使用所涉及的電影和演員的ID來跟蹤您的屏幕更新,然後在您點擊「保存」時將帶有演員ID列表的電影ID發送給控制器。

現在我的問題:假設我通過在數據庫中添加四個Actor來更新Movie。我有要添加的actor id列表,但我沒有實際的Actor對象,因爲我只從UI接收到它們的id。

要進行此更新,是否需要填充四個完整的Actor對象,才能將它們添加到我的Movie對象,以便我可以將它存儲回數據庫?換句話說,我是否需要先從我的數據庫中進行選擇,然後才能進行更新?做出額外的選擇調用似乎效率低下,因爲所有真正更新的內容都會將一些行添加到連接表中,並且我已經擁有完成此操作所需的全部信息。

因此,hibernate是否提供了一種方便的方法直接將鍵添加到連接表本身(無需編寫自定義原始sql查詢)?

回答

0

Session.load做你想要的。它返回只包含actor的ID的Actor的代理,並假定你知道該actor在數據庫中。如果沒有,則由於外鍵約束被破壞,您的事務當然會在更新後回滾。 如果演員已經出現在會話中,則返回。如果事務最終需要調用其中一個actor的方法,那麼不需要probem:它是一個代理,並且如果需要,將會加載actor的狀態。

與JPA EntityManager的等效方法是getReference