根據Thorben Janssen 的這篇精彩文章,@OneToMany 的雙向關聯如下所示:
Item item3 = new Item();
item3.setName("Third Item");
item3.setOrder(order);
em.persist(item3);
order = em.find(PurchaseOrder.class, orderId);
order.getItems().add(item3);
換一種說法,
- 保持@ManyToOne 關系的所有者
- 只需將所有者添加到@OneToMany 物體,您甚至不需要第二次呼叫 save()
現在,這是為什么呢?我實作了這一點并進行了一些測驗,只是為了做到這一點。就我個人而言,這是高度混淆的休眠魔法,這種行為沒有意義。
這就是為什么我想更深入地研究 Hibernate 的作業原理,所以我試圖了解這里到底發生了什么。我知道物體與休眠持久層相關聯,但從這里開始,我的知識變得有點不穩定。
uj5u.com熱心網友回復:
要了解發生了什么,您需要熟悉Hibernate ORM 物體狀態。
在您的情況下,這兩個物體都是托管的,因此 Hibernate ORM 知道它需要應用更改。item3被管理是因為它被持久化了,order被管理是因為它是find.
javadoc 的session.save開頭為:
持久化給定的瞬態實體...
在這種情況下,沒有一個物體是瞬態的。
請注意,您可以更改示例,具體取決于您如何將關聯映射到不同的級聯型別。
例如,如果items使用 映射關聯CascadeType.PERSIST,這也可以:
Order order = new Order();
Item item3 = new Item();
item3.setName("Third Item");
item3.setOrder(order);
order.getItems().add(item3);
// Both entities are transient in this case
em.persist(order);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/456301.html
標籤:休眠
