Запрос критериев 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)
, В противном случае они окажутся во внутреннем соединении.