我在SpringBoot工作,我正在使用JPA存储库进行数据库访问。我有两个实体说
Class A{
@Id
private String primarykeyColumnA;
@OneToMany(mappedBy="campaign",fetch = FetchType.EAGER,cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH })
private Set<B> b;
....
}
Class B{
@Id
private Long primaryKeyColB;
@ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.REMOVE })
@JoinColumn(name = "primarykeyColumnA")
private A a;
}
所以我必须加入这两个表,它是一对多的(对于一个A,会有很多B)关系。它工作正常。但我想确保使用Left join。它通常是左连接还是我应该专门使用查询?
非常感谢一些帮助。
答案 0 :(得分:2)
我认为这取决于您使用的JPA提供商。对于Hibernate,使用 fetch = EAGER 属性,Hibernate将无法执行您在加载某些A实体时所期望的内容。
而是执行以下步骤:
如果B实体不在缓存中,则会出现1 + n个查询问题。
如果要使用单个SQL查询加载具有相关B实体的A实体,则必须使用 join fetch 子句(left,inner,...取决于你的情况)。