【发布时间】: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 的对象,我可以在其中访问 class1.class2.class3? 谢谢
【问题讨论】:
标签: java xml eclipse hibernate mapping