gpt4 book ai didi

java - 了解hibernate中依赖对象集合的限制

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:03:22 24 4
gpt4 key购买 nike

hibernate documentation for dependent collections说:

There cannot be a reference to the purchase on the other side for bidirectional association navigation. Components are value types and do not allow shared references. A single Purchase can be in the set of an Order, but it cannot be referenced by the Item at the same time.

有人可以帮助我理解这一点吗?

1) 为什么hibernate限制了对方purchase的引用?

2) 为什么不允许共享引用?

3)单次购买不能同时被Item引用是什么意思?

谁能用一些例子解释一下。

最佳答案

为了解释这一点,我将从文档中的另一个示例开始:

代码片段显示了字符串集合的映射:

<set name="aliases"
table="person_aliases"
sort="natural">
<key column="person"/>
<element column="name" type="string"/>
</set>

在这种情况下,我们确实有一个集合 aliases ,表示为 List<string> , 映射为 <element> .

我们可以清楚地看到,这里的每个元素 (别名) 都是一个 string - 值类型(与引用类型的含义相反)。我们也不希望系统中有任何其他地方引用这个元素...
因为它不是引用类型

现在,让我们转到:

我们看到的是一个例子,(非常)相似,但不是<element> , 它正在使用 <composite-element> :

<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>

同时对于 string 我们在 Java (string) 中有相关对象 - 对于上述构造,我们确实需要自定义类型。那将是一个 class Pruchase {}

但即使这是自定义类型 - 我们自己的类,在这种情况下它也表示为值类型(同样,与引用类型相反)

为什么?因为它没有任何 id,任何键 - 被引用。它是从领域建模的角度构建的。也许这引用自 doc可以提供更多帮助:

Like value types, components do not support shared references. In other words, two persons could have the same name, but the two person objects would contain two independent name objects that were only "the same" by value.

最后:

这是一项功能。事实上我们可以使用<composite-element><element> ,并不意味着我们必须。我们仍然可以将 Purchase 类转换为一级公民,方法是将其映射为 <class>。 .然后所有标准的东西将再次工作——因为它代表一个引用类型...

关于java - 了解hibernate中依赖对象集合的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25637058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com