休眠圈出的实体

时间:2019-06-13 10:42:41

标签: java hibernate jpa lazy-initialization

直截了当: 我有一个包含项目的小组。我希望使用外键处理该关联,这就是为什么它具有mapbyby标记的原因。我的问题是,如果我查询组,则会陷入无限循环,其中该组列出了包含该组的项目,而该项目又列出了又包含该组的项目.....等等。我的实体(最低版本):

@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。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

如果通过查询获取对象,请添加连接提取,例如:

从Project p中选择p加入p.group g组中

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

请始终使用FetchType.LAZY来防止这种情况,特别是如果是列表。