按子选定实体的id获取时出现问题
这里是结构
public class A {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
//Other class members;
}
public class B {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ValueRestriction("NOTNULL")
@ManyToOne
@JoinColumn(name = "C_ID")
private C c;
@ValueRestriction("NOTNULL")
@JsonIgnore
@ManyToOne
@JoinColumn(name = "A_ID")
private A a;
//Other class members;
}
public class C {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@JsonIgnore
@OneToMany(mappedBy = "c")
@Fetch (FetchMode.SELECT)
private List<B> bs;
@ValueRestriction("NOTNULL")
@JsonIgnore
@ManyToOne
@JoinColumn(name = "A_ID")
private A a;
//Other class members;
}
所以当我们结束冬眠的时候
em().find(B.class, id);
hibernate查询还获取c实体中a的列。这将导致一个更大的实体结构
target lists can have at most 1664 entries
(这是一个简单的演示)
在我们的例子中,我们需要在所有这些子实体中引用实体a
如果同一个对象是ame,我们如何防止hibernate多次获取它。
在我们的案例中,实体b和实体c中的a总是相同的。实体b的a实体与c实体不同的情况在我们的结构中是不可能的。
1条答案
按热度按时间scyqe7ek1#
问题是
@ManyToOne
以及@OneToOne
默认情况下,执行快速获取。切换到延迟获取@ManyToOne(fetch = LAZY)
为了避免这种情况。