【发布时间】:2019-04-16 08:29:42
【问题描述】:
我想将 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;
【问题讨论】:
-
在您的 sql 中,WHERE 子句中有 is null 条件,而在 ON 条件下的其他查询中,这是完全不同的。除此之外,当您要求 a.id 为空且同时等于 t.id 时,查询真的有效吗? Null 永远不会等于 null。
标签: java hibernate spring-boot criteria criteria-api