【问题标题】:How to translate MySQL to criteria queries? [duplicate]如何将 MySQL 转换为条件查询? [复制]
【发布时间】: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


【解决方案1】:

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

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

然后为cb.isNull(a.get("id"))过滤cq

【讨论】:

    猜你喜欢
    • 2020-01-10
    • 2019-02-13
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 2015-03-22
    • 2015-04-21
    相关资源
    最近更新 更多