休眠圈出的实体

Hibernate circled entities

开门见山: 我有一个包含项目的组。我希望该关联使用外键处理,这就是它具有 mappedby 标记的原因。我的问题是,如果我查询组,我会进入一个无限循环,其中组列出包含该组的项目,该组列出再次包含该组的项目......等等。我的实体(最小版本):

@Entity
public class DBGroup {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;

   @OneToMany(mappedBy = "group",cascade=CascadeType.ALL,fetch = FetchType.EAGER)
   private List<Project> projects = new ArrayList<>();
}


@Entity
public class Project {
  @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private long id;

@ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn//added this because i read somewhere this would help somehow but it didnt
    private DBGroup group;
}

任何人都可以帮助避免该循环吗?如果我在 DBGroup 中将 fetchtype 更改为 lazy,我会收到 LazyInitializationEXception。

感谢任何帮助。

事务结束时,您将获得所有未获取对象的 LazyInitializationEXception。

如果您通过查询获取对象,请添加 join fetch,例如:

select p 来自项目 p join fetch p.group g

您可以在退出 ejb 之前通过调用 size 方法的代码获取列表。

尽可能使用 FetchType.LAZY 来防止这种情况发生,尤其是在列表中时。