【问题标题】:HIbernate load a relationship with depth 2HIbernate加载与深度2的关系
【发布时间】:2012-02-25 17:39:15
【问题描述】:

我有 3 节课
Class1 有一个 List,其中包含 class2 的元素。
这是通过可连接映射的(不能用外键映射,因为键不是唯一的)!

Class2 的外键是 class3。
Class3 不会从这种关系中拯救任何东西。

整个过程是这样的:

  Class1             Class1-2 jointable          Class2
+-----------+   +-----------+-----------+   +-----------+-----------+
| Class1_ID |   | Class1_ID | Class2_ID |   | Class2_ID | Class3_ID |
+-----------+   +-----------+-----------+   +-----------+-----------+
| 1         |   | 1         | 3         |   | 3         | 10        |
| 2         |   | 2         | 7         |   | 7         | 3         |
| ...       |   | ...       | ...       |   | ...       | ...       |
+-----------+   +-----------+-----------+   +-----------+-----------+

 Class3
+-----------+
| Class3_ID |
+-----------+
| 10        |
| 3         |
| ...       |
+-----------+

映射如下所示:

Class1: 
List<Class2> class2;

<bag name="class2" cascade="all" table="Class1_Class2" lazy="false" access="field">
     <key column="Class1_ID" />
        <many-to-many class="Class2" column="Class2_ID"/>

Class2: 
Class3 class3

<many-to-one name="class3" class="Class3" column="Class3_ID" fetch="join" unique="false"/>

因此,当我使用 session.load(Class1.class, id) 加载 class1 的元素时,我得到了该对象。但是!
我可以访问 class1.class2(元素列表),但是当我尝试访问 class1.class2.class3 时,它给了我一个异常,因为没有会话,所以无法执行延迟加载。
由于我的数据结构,此时我无法打开会话。
我需要通过一个数据库访问来加载所有内容。

所以现在我的问题是:我可以更改将立即加载所有内容的映射吗?如果我不能在 1 个会话中加载所有内容并返回一个类型为 class1 的对象,我可以在其中访问 c​​lass1.class2.class3? 谢谢

【问题讨论】:

    标签: java xml eclipse hibernate mapping


    【解决方案1】:

    我不熟悉 XML 配置(语法),但你不能像定义 Class1Class2 之间的关系一样急切地定义 Class2Class3 之间的关系(@987654325 @)? fetch="join" 应该自动设置这个值,但显然不是那样执行的。

    (我不会告诉你在会话中触摸对象会加载它的技巧(例如class1.getClass2().getClass3() // Slightly different in your case because of many-to-many),因为那将是一种技巧。)

    这是通过可连接的映射(不能用外键映射,因为键不是唯一的)!

    您可以通过 Hibernate 在键列上设置unique 约束。然后甚至可以用一个语句选择所有内容并加入(这会自动应该是急切的)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多