【发布时间】:2019-10-27 22:37:34
【问题描述】:
直截了当: 我有一个包含项目的组。我希望使用外键处理该关联,这就是它具有 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。
感谢任何帮助。
【问题讨论】:
-
另一个完美的例子为什么你不应该使用
FetchType.EAGER -
所以如果我使用 Lazy FetchType,这个设置会起作用吗?这意味着我需要以某种方式修复 LazyInitializationException
-
在哪里陷入无限循环?加载后,您对实体做什么?序列化为 JSON?
-
LazyInitializationException很容易通过不访问事务/会话之外的属性来修复。因此,要么在离开事务之前手动加载深度 X(通过简单地访问属性),要么总是打开一个新的事务/会话来获取丢失的数据 -
但我正在使用结果来形成 JAX-RS 响应。它将它转换为一个 json 对象,并且我相信它必须遍历所有属性,因此我无法控制它
标签: java hibernate jpa lazy-initialization