首页 > 解决方案 > 如何将 MySQL 转换为条件查询?

问题描述

我想将 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;

标签: javahibernatespring-bootcriteriacriteria-api

解决方案


您正在尝试将 where 子句放在 on() 语句中。

你应该离开 b.on(cb.equal(a.get("id"), b.get("id")));

然后过滤 cqcb.isNull(a.get("id"))


推荐阅读