QueryDSL Left Join无法与JPA实体正确映射

时间:2019-05-23 04:25:20

标签: jpa querydsl

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;
}

1 个答案:

答案 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();

在此处详细了解联接类型:

https://www.diffen.com/difference/Inner_Join_vs_Outer_Join