我想将MySQL查询转换为等效条件查询。
我已经尝试过了,它不起作用。
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Data> cq = cb.createQuery(Data.class);
Root<Data> a = cq.from(Data.class);
Join<Data, Item> b = a.join("Data", JoinType.LEFT); //left join
b.on(
cb.and(
cb.equal(a.get("id"), b.get("id")),
cb.isNull(a.get("id"))
)
);
cq.select(b);
List<Data> results = em.createQuery(cq).getResultList();
这是MySQL代码:
select * from data t left join item a
on t.id = a.id
where a.id is null;
答案 0 :(得分:1)
您正在尝试将where子句放在on()语句中。
您应该离开b.on(cb.equal(a.get("id"), b.get("id")));
,然后为cb.isNull(a.get("id"))
过滤cq