我是JPA的新手,我有一个Left Join方案。 我有如下的本机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);
有人可以指导我吗?
答案 0 :(得分:0)
您必须用mvRoot.get(MonitoringBE.id_travel)
替换多选语句中的mvRoot.join(MonitoringBE.id_travel, JoinType.LEFT)
和其他内容。否则,它们将以内部联接结尾。