Java 了解hibernate中依赖对象集合的限制
报告说: 在另一端不能有对购买的引用 双向关联导航。组件是值类型和 不允许共享引用。一次购买可以包含在 订单,但该项不能同时引用该订单 有人能帮我理解这一点吗 1) 为什么hibernate限制另一端的购买参考 2) 为什么它不允许共享引用 3) 一次采购不能同时被该项目引用是什么意思Java 了解hibernate中依赖对象集合的限制,java,hibernate,Java,Hibernate,报告说: 在另一端不能有对购买的引用 双向关联导航。组件是值类型和 不允许共享引用。一次购买可以包含在 订单,但该项不能同时引用该订单 有人能帮我理解这一点吗 1) 为什么hibernate限制另一端的购买参考 2) 为什么它不允许共享引用 3) 一次采购不能同时被该项目引用是什么意思 有人能用一些例子来解释这一点吗。为了解释这一点,我将从doc的另一个例子开始: 代码段显示字符串集合的映射: <set name="aliases" table="person
有人能用一些例子来解释这一点吗。为了解释这一点,我将从doc的另一个例子开始:
<set name="aliases"
table="person_aliases"
sort="natural">
<key column="person"/>
<element column="name" type="string"/>
</set>
对于string
我们有Java中的相关对象(string)-对于上述构造,我们确实需要自定义类型。那将是一个类{}
但即使这是一个自定义类型——我们自己的类,在这个场景中它也表示为一个值类型(同样,与引用类型相反)
为什么??因为它没有任何id,所以需要引用任何键。它是从领域建模的角度构建的。也许这句话可以帮助更多人:
与值类型一样,组件不支持共享引用。换句话说,两个人可以有相同的名字,但两个人对象将包含两个独立的名字对象,它们的值仅“相同”
最后:
这是一个特点。我们可以使用
和
这一事实并不意味着我们必须这样做。通过将Purchase类映射为
,我们仍然可以将其转换为一级公民。然后所有标准的东西都会再次工作-因为它将代表一个参考类型。感谢Radim的详细解释。所以我理解,由于它只是一个类似于价值类型的组件,我们不能在采购和订单之间进行双向导航,对吗?如果你能回答我帖子中的第三个问题,那将非常有帮助。回答这三个问题:“purchase
不能被项目
引用。”这正是我想说的。采购,映射为ValueType
。采购不是参考类型。它不能被引用。即使是按项目。商品不能有列表
,因为没有常见的
购买。但是如果我们想要的话。。。我们可以-通过将
转换为
。然后我们将定义Id,并使其成为引用类型。所以它甚至可以被项目引用。它有用吗?太好了;)享受美妙的冬眠吧,先生;)
<set name="purchasedItems" table="purchase_items" lazy="true">
<key column="order_id">
<composite-element class="eg.Purchase">
<property name="purchaseDate"/>
<property name="price"/>
<property name="quantity"/>
<many-to-one name="item" class="eg.Item"/> <!-- class attribute is optional -->
</composite-element>
</set>