当前位置: 首页 > 面试题库 >

理解休眠中收集依赖对象的限制

杨赞
2023-03-14
问题内容

依赖集合的hibernate文档说:

双向关联导航无法在另一侧参考购买。组件是值类型,并且不允许共享引用。单个购买可以在订单集中,但不能同时被商品引用。

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

1)为什么hibernate会限制另一方的购买参考?

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

3)物料不能同时引用一次购买是什么意思?

有人可以用一些例子解释一下。


问题答案:

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

  • 7.3.1。排序的集合

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

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

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

我们可以清楚地看到,这里的每个元素 (别名) 都是string-值类型 (与Reference类型相反)
。我们也没有想到,有可能是系统中的任何进一步的地方, 引用 这个元素......
因为它 不是 一个 Refeence类型

现在,让我们转到:

  • 9.2。依赖对象的集合

我们看到的是一个 (非常) 相似的示例,但不是<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我们有相关的对象 (字符串) -对于上述构造,我们确实需要自定义类型。那将是一个class Pruchase {}

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

为什么?因为它没有任何ID,所以要引用任何密钥。它是从Domain建模的角度构造的。也许该文档中的引用可以提供更多帮助:

像值类型一样,组件不支持共享引用。换句话说,两个人可能具有相同的名称,但是两个人对象将包含两个独立的名称对象,它们的值仅“相同”。

最后:

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



 类似资料:
  • 问题内容: 我对Hibernate还是很陌生,一直在尝试确定它将为您做什么以及需要您做什么。 最重要的是处理一个对象,该对象具有数据库中尚不存在的依赖项。例如,我有一个Project对象,其中包含一个Manufacturer字段,该字段接受Manufacturer对象作为其值。在数据库中,我有一个带mfr_id列的产品表,该列是对Manufacturers表的引用(一种相当典型的单向一对多关系)。

  • 问题内容: 我一直遇到这个问题: 我想让休眠管理一个表,该表代表一个集合的集合。例如: 地图地图 套装清单 清单地图 例如,我希望能够代表这一点: 作为一个表: 没有自定义的休眠代码似乎是不可能的,我不介意。但是我希望有人对自定义代码的外观有所指导。 我应该扩展AbstractPersistentCollection吗? CompositeUserType? 可以管理多个表是否正常,但是从数据库角

  • 问题内容: 如何取消代理hibernate对象,以支持多态? 考虑以下示例。A和B类是两个hibernate实体。B具有两个子类型C和D。 该代码无法执行C或D块,因为B集合已被延迟加载,并且B的所有实例均为Hibernate代理。我想要一种取消代理的方法。 注意:我意识到可以优化查询以急切地获取所有B。我正在寻找替代方案。 问题答案: 这是我们的解决方案,已添加到持久性工具中:

  • 问题内容: 在过去的几天中,我尝试使用MOXy JAXB支持对Hibernate模型的XML编组/解组。尝试执行此操作时,我遇到了hibernate代理对象的问题。考虑类似: 我尝试通过以下方式使用MOXy JAXB映射此代码: 我的问题是,hibernate实例化了通过在User上调用getAddress()获得的地址的代理对象。然后,当JAXB尝试封送对象时,它无法发现它实际上是它要封送的Co

  • 本文向大家介绍详解Vue依赖收集引发的问题,包括了详解Vue依赖收集引发的问题的使用技巧和注意事项,需要的朋友参考一下 问题背景 在我们的项目中有一个可视化配置的模块,是通过go.js生成canvas来实现的。但是,我们发现这个模块在浏览器中经常会引起该tab页崩溃。开启chrome的任务管理器一看,进入该页面内存和cpu就会暴涨,内存经常会飙到700多M。但是我们的canvas实际的像素只有约5

  • 问题内容: 在合理的时间内从数据库中完全加载非常复杂的对象以及合理的查询数量时,我遇到了问题。 我的对象有很多嵌入式实体,每个实体都引用了另一个实体,另一个实体又引用了另一个,依此类推(因此,嵌套级别为6) 因此,我创建了示例来演示我想要的内容:https : //github.com/gladorange/hibernate-lazy- loading 我有用户。 用户有喜欢的 橙子,苹果,葡萄