我的实体内部有@OneToMAny
个关系。
是否可以禁用jpa为连接列生成选择?因为我在主表中有很多记录,当选择它们时,每条记录都会对连接列执行select。我想禁用这个选择是否可能?
更新 我尝试插入了获取LAZY,但它仍然为Table02f和Table03f ...
创建了一个选择这是我的代码:
public class Table01f implements Serializable {
@OneToMany(fetch=FetchType.LAZY , cascade = CascadeType.ALL, mappedBy = "table01f")
private List<Table02f> table02fList;
//getter & setter...
}
public class Table02f implements Serializable {
@JoinColumn(name = "F2PRP", referencedColumnName = "F1PRP", insertable = false, updatable = false)
@ManyToOne(optional = false)
@JsonIgnore
private Table01f table01f;
@OneToMany(fetch=FetchType.LAZY , cascade = CascadeType.ALL, mappedBy = "table02f")
private List<Table03f> table03fList;
//getter & setter...
}
public class Table03f implements Serializable {
@JoinColumns({
@JoinColumn(name = "F3PRP", referencedColumnName = "F2PRP", insertable = false, updatable = false),
@JoinColumn(name = "F3BRN", referencedColumnName = "F2BRN", insertable = false, updatable = false)})
@ManyToOne(optional = false)
@JsonIgnore
private Table02f table02f;
//getter & setter...
}
提前感谢。
答案 0 :(得分:2)
只需将抓取类型LAZY
添加到您的@OneToMany
关系:
@OneToMany(fetch=FetchType.LAZY)
当您加载主要实体的列表时,JPA不会填充此关系的列表,从而避免生成SELECT
。
只需查看JPA文档中的此功能,即可了解如何使用它。
答案 1 :(得分:1)
如果您不需要数据使其成为LAZY(通常总是让所有东西都变得懒散)。
如果您需要数据,则可以使用批量提取或连接提取。
http://java-persistence-performance.blogspot.com/2010/08/batch-fetching-optimizing-object-graph.html