Оставил соединение с нулями в запросе jpa mysema
Осталось присоединиться, не получить нули
Мне нужно получить все записи A, когда ABname, например, "%pac%" ИЛИ ACname, например, "%pac%"
Class<T> entityClass = (Class<T>) A.class;
PathBuilder<T> entity = new PathBuilder<T>(entityClass, "entity");
EntityManager entityManager = entityManagerProvider
.getEntityManager(entity.getType());
JPAQuery query = new JPAQuery(entityManager);
query = query.from(entity);
PathBuilder<?> associationPathB = entity.get("B");
query = query.leftJoin(associationPathB).fetch();
PathBuilder<?> associationPathC = entity.get("C");
query = query.leftJoin(associationPathC).fetch();
BooleanBuilder baseSearch = new BooleanBuilder();
baseSearch.and(associationPathB.getString("name").lower().like("%pac%"))
.or(associationPathC.getString("name").lower().like("%pac%"));
query.where(baseSearch.getValue());
long count = query.count();
сгенерированный запрос
select entity from A entity
left join fetch entity.B
left join fetch entity.C
where lower(entity.B.name) like ?1 escape '!'
or lower(entity.C.name) like ?2 escape '!'
count возвращает только 2 записи, но у меня есть 10 записей типа A с B.name like='pac'.
Только 2 записи не являются нулевыми в столбце C, но это соединение оставляется с условием ИЛИ
Почему бы не вернуть 10 записей?
если я выполняю запрос в БД, он возвращает 10 регистров
select * from A entA
left join B entB on entB.id = entA.entB
left join C entC on entC.id = entA.entC
where entB.name like '%pac%' OR
entC.name like '%pac%'