QueryDSL无法与JPA一起进行左连接。
我使用的是queryDSL版本4.2.1,并将响应直接映射到javax.persistence实体。
对于左联接/右联接,联接条件不起作用。在调用entity1.getEntity2()
时,它将获取不考虑连接条件(此处为name =“ testName”)的每个实体。
在这种情况下,还有其他方法可以将结果映射到JOIN
表之后吗?
JPAQuery<Entity1> query = new JPAQuery<>(entityManager);
query.from(table1);
query.leftJoin(table2).on(table2.id.eq(table1.id).and(table2.name.eq("testName"));
List<Entity1> list = query.fetch();
@Entity
public class Entity1{
private Integer id;
@OneToMany(mappedBy = "entity1", fetch = FetchType.LAZY)
private List<Entity2> entity2;
}
答案 0 :(得分:0)
左或右联接是外部联接。
因此,如果使用左连接,则将选择从左起所有记录(在您的情况下为table1)。
如果只希望table1中有记录,而table2上有相应记录,则必须使用innerJoin。
JPAQuery<Entity1> query = new JPAQuery<>(entityManager);
query.from(table1);
query.innerJoin(table2).on(table2.id.eq(table1.id).and(table2.name.eq("testName"));
List<Entity1> list = query.fetch();
在此处详细了解联接类型: