我有一个类A
,它有一个类B
的对象,它有一个类C
的对象。我希望从类B
的对象获取类A
的对象,而不在b中获取类C
的对象。 (我有,并希望保持这种方式,一切都是延迟加载)
我在做:
Hibernate.initialize(a.getObjectOfClassB());
但是得到例外。有什么办法可以做我想要的吗?切割hibernate初始化链?
先谢谢!
答案 0 :(得分:0)
因此,您的实体结构似乎映射如下:
public class EntityA {
@OneToMany(mappedBy = "a")
private List<EntityB> bList;
}
public class EntityB {
@ManyToOne
private EntityA a;
@OneToMany(mappedBy = "b")
private List<EntityC> cList;
}
public class EntityC {
@ManyToOne
private EntityB b;
}
因此,您想要获取其关联的EntityA
实例的特定EntityB
。您可以在查询时或作为后期初始化步骤获取该列表。
这里需要注意的重要一点是,A - B - C之间的映射使用的是@OneToMany
,默认情况下会延迟提取。
要在查询时执行此操作:
SELECT a
FROM EntityA a
JOIN FETCH EntityB b
WHERE a.id = :entityAId
已退回的EntityA
已经为您加载了List<EntityB>
,您无需执行任何操作。
在您获取单个EntityA
实例后,将其作为后期初始化步骤执行此操作。
Hibernate.initialize(entityA.getBList());
or
entityA.getBList().size();