Запрос критериев JPA для левых объединений

Я новичок в JPA, и у меня есть сценарий левого соединения. У меня есть свой собственный SQL-запрос, как показано ниже, и я использую левое соединение, чтобы получить полные записи из таблицы V_MONITORING для st.id = 10001. У меня есть некоторые нулевые значения для id_legislature, которые также должны быть выбраны и, следовательно, используя левое соединение

select distinct 
    mv.id_set, mv.id_travel, mv.id_legislature
from 
   V_MONITORING mv 
     left join v_set st on mv.id_set = st.id
     left join v_travel fg on mv.id_travel = fg.id
     left join v_legislature gg on mv.id_legislature = gg.id;

То же самое, что я реализую с помощью запроса критериев JPA, я не могу получить нулевые записи. Ниже приведен код

Predicate predicate = cb.conjunction();
Root<MonitoringBE> mvRoot = criteriaQuery.from(MonitoringBE.class); 
mvRoot.fetch(MonitoringBE.id_set, JoinType.LEFT);
mvRoot.fetch(MonitoringBE.id_travel, JoinType.LEFT);
mvRoot.fetch(MonitoringBE.id_legislature, JoinType.LEFT);

final Path<Object> serieneinsatzterminPath= mvRoot.get(MonitoringBE.id_set);
predicate = cb.and(predicate, cb.EqualTo(serieneinsatzterminPath.get(SetBE.GUELTIG_VON_DATUM), startSetDate));

criteriaQuery.multiselect(
   mvRoot.get(MonitoringBE.id_travel).alias("id_travel"),
   mvRoot.get(MonitoringBE.id_set).alias("id_set"),
   mvRoot.get(MonitoringBE.id_legislature).alias("id_legislature"))
.distinct(true).where(predicate);

Может ли кто-нибудь руководить мной.

1 ответ

Вы должны заменить mvRoot.get(MonitoringBE.id_travel) и другие в множественном выборе mvRoot.join(MonitoringBE.id_travel, JoinType.LEFT), В противном случае они окажутся во внутреннем соединении.

Другие вопросы по тегам