【发布时间】:2019-11-26 08:01:21
【问题描述】:
我正在阅读“Hibernate in Action”一书,发现难以掌握以下概念。
我无法理解为什么同一个外键有两种不同的内存表示,以及为什么当执行以下代码时,hibernate 会检测到外键的两种不同变化:
bid.setItem(item)
bids.add(bid)
存储在项目的出价集合中的出价和出价都引用相同的外键。
【问题讨论】:
我正在阅读“Hibernate in Action”一书,发现难以掌握以下概念。
我无法理解为什么同一个外键有两种不同的内存表示,以及为什么当执行以下代码时,hibernate 会检测到外键的两种不同变化:
bid.setItem(item)
bids.add(bid)
存储在项目的出价集合中的出价和出价都引用相同的外键。
【问题讨论】:
Item 将Bids 的集合保存在内存中,Bid 将Item 保存在内存中。
Item
------
Collection<Bid> bids;
Bid
------
Item item;
Bid bid = new Bid(...); //bid object
Item item = getItemFromDb(); //item object
bid.setItem(item);
bids = item.getBids();
bids.add(bid);
如果您为bid 设置item,您还必须确保更新item 对象的bids 集合以保持所有内容同步。否则,bid 对象将具有与之关联的 item,但 item 对象的集合中不会包含 bid,这意味着 item 对象将不同步。
希望这会有所帮助!
【讨论】: