JPA连接列仅用于插入/删除,禁用选择

时间:2013-06-20 08:43:54

标签: jpa jpa-2.0

我的实体内部有@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...
}

提前感谢。

2 个答案:

答案 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