java - 休眠圈出的实体
问题描述
直截了当:我有一个包含项目的组。我希望使用外键处理该关联,这就是它具有 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 更改为惰性,我会得到一个 LazyInitializationEXception。
任何帮助表示赞赏。
解决方案
当事务结束时,您将获得所有未获取的对象的 LazyInitializationEXception。
如果您使用查询添加连接获取对象,例如:
select p from Project p join fetch p.group g
您可以在退出 ejb 之前通过调用 size 方法的代码获取列表。
尽可能使用 FetchType.LAZY 来防止这种情况发生,特别是如果是列表。
推荐阅读
- php - 如何在php中找到每个子集的总和?
- django - 验证 REST 端点上的字段
- excel - 如何将数据从范围复制到表中的最后一行(转置)?
- spring-boot - 创建多个实体时映射错误
- asp.net - 带有菜单的 ASP.NET 母版页和带有数据输入表单的内容页
- java - 如何在我的代码中添加 try 、 catch 语句以仅接收整数值?
- javascript - 通过 PHP 处理 AJAX 数据
- python - python中的字典比较
- javascript - 在 asp.net 中单击按钮的新选项卡中打开 URL
- jquery - 如何在或更快地克隆元素时重置 id 和 data-attr