你如何检索嵌套集?

时间:2013-07-03 17:48:45

标签: hibernate hibernate-mapping

是否存在我缺少的注释或者这是对hibernate检索的限制?

实体:

class A {
   Long id;
   Set<B> b;

   @ManyToMany(fetch = FetchType.EAGER)
   @JoinTable(name = "A_B", joinColumns = @JoinColumn(name = "A_ID"), inverseJoinColumns = @JoinColumn(name = "B_ID")
   public Set<B> getBs() {
      return b;
   }

}

class B {
   Long id;
   Set<C> c;

   @ManyToMany(fetch = FetchType.EAGER)
   @JoinTable(name = "B_C", joinColumns = @JoinColumn(name = "B_ID"), inverseJoinColumns = @JoinColumn(name = "C_ID")
   public Set<C> getCs() {
      return C;
   }

}

的DAO:

class ADaoImpl {    
   public A load(Long id) {
      return new A((A) session.load(A.class, id);
   }
}

当我尝试加载A时,我得到了

Caused by: java.lang.NullPointerException
at org.hibernate.engine.internal.StatefulPersistenceContext.getLoadedCollectionOwnerOrNull(StatefulPersistenceContext.java:853)

2 个答案:

答案 0 :(得分:7)

我有一个与此非常类似的问题是我有嵌套集,并且每个的hashCode方法都出现在堆栈跟踪中。在hashCode方法中,它们互相引用,所以我删除了hashcode方法中每个对象的引用,我不再有这种异常

答案 1 :(得分:1)

我认为这不是完整的例外吗?

A级的二传手在哪里? A类中的b集合是友好的作用域,然后hibernate将无法写入/注入它的值。 B类中的C集合也是如此。

请在此处复制您的hibernate.xml和任何其他配置类。 hibernate / java版本也很重要。