Hibernate.initialize异常 - 切割依赖链

时间:2015-12-14 15:40:24

标签: java json spring hibernate

我有一个类A,它有一个类B的对象,它有一个类C的对象。我希望从类B的对象获取类A的对象,而不在b中获取类C的对象。 (我有,并希望保持这种方式,一切都是延迟加载)

我在做:

Hibernate.initialize(a.getObjectOfClassB());

但是得到例外。有什么办法可以做我想要的吗?切割hibernate初始化链?

先谢谢!

1 个答案:

答案 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();