QueryDSL Left Join не отображается должным образом с сущностью JPA - PullRequest
0 голосов
/ 23 мая 2019

QueryDSL не работает должным образом с JPA для левого соединения.Я использую queryDSL версии 4.2.1 и сопоставляю ответ непосредственно с сущностью javax.persistence.Для левого соединения / правого соединения условие соединения не работает.Он выбирает каждую сущность, не обращая внимания на условие соединения (здесь это name = "testName"), когда вызывается entity1.getEntity2().

Есть ли другой способ, применимый для этого случая, чтобы отобразить результат после таблиц 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 голосов
/ 23 мая 2019

Левое или правое соединение является внешним соединением.

Так что, если вы используете левое соединение, будут выбраны все записи слева (в вашем случае таблица1).

Если вы хотите толькозаписи из таблицы 1, если в таблице 2 есть соответствующие записи, вы должны использовать 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

...