Hibernate 如何检索嵌套集?

Hibernate 如何检索嵌套集?,hibernate,hibernate-mapping,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&

是否缺少注释,或者这是对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;
   }

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

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

我认为这不是完全的例外,对吗

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


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

我有一个与此非常类似的问题,那就是我有嵌套的集合,每个集合的hashCode方法都显示在堆栈跟踪中。在hashCode方法中,它们相互引用,因此我删除了hashCode方法中对每个对象的引用,我不再得到这个异常

这是正确的异常。你可以假设DAO在其他情况下工作正常,并且有所有必要的getter和setter方法如果只是缺少合适的setter,Hibernate不会抛出NPE…我不知道你为什么这么说,但如果这是真的,那仍然是Hibernate bug。(除非Hibernate记录了这种行为——它可能没有记录)。您使用的是什么Hibernate版本?还请发布完整的堆栈跟踪(至少到您自己的代码)。无论如何,我觉得它像Hibernate bug。我在
StatefulPersistenceContext.java:853
中搜索了他们的bug数据库,但没有使用NPE。然后你可以提交一个bug。我的类中也有一个Set,通过删除HashCode和Equals中的相互引用解决了相同的异常。你用什么替换了它?非常感谢,我从lombok获得了一个
@Data
,它正在使用所有属性生成我的
HashCode
方法。我刚刚添加了
@EqualsAndHashCode(exclude={“mySet”})
,效果很好!
Caused by: java.lang.NullPointerException
at org.hibernate.engine.internal.StatefulPersistenceContext.getLoadedCollectionOwnerOrNull(StatefulPersistenceContext.java:853)