Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 了解hibernate中依赖对象集合的限制_Java_Hibernate - Fatal编程技术网

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

Java 了解hibernate中依赖对象集合的限制,java,hibernate,Java,Hibernate,报告说: 在另一端不能有对购买的引用 双向关联导航。组件是值类型和 不允许共享引用。一次购买可以包含在 订单,但该项不能同时引用该订单 有人能帮我理解这一点吗 1) 为什么hibernate限制另一端的购买参考 2) 为什么它不允许共享引用 3) 一次采购不能同时被该项目引用是什么意思 有人能用一些例子来解释这一点吗。为了解释这一点,我将从doc的另一个例子开始: 代码段显示字符串集合的映射: <set name="aliases" table="person

报告说:

在另一端不能有对购买的引用 双向关联导航。组件是值类型和 不允许共享引用。一次购买可以包含在 订单,但该项不能同时引用该订单

有人能帮我理解这一点吗

1) 为什么hibernate限制另一端的购买参考

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

3) 一次采购不能同时被该项目引用是什么意思


有人能用一些例子来解释这一点吗。

为了解释这一点,我将从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>