【问题标题】:How to create bogus Predicate in JPA如何在 JPA 中创建虚假谓词
【发布时间】:2011-11-10 12:20:34
【问题描述】:

有没有办法在 JPA 中创建虚假谓词? 有点像这样:

CriteriaBuilder cb = em.getCriteriaBuilder;
Predicate pred = cb.isTrue(false);

CriteriaBuilder 的几乎所有方法都以 Expression 作为参数。 我也试过这个无济于事:

Expression<Object> path = cb.coalesce.value(null);
Predicate pred = cb.isNotNull(path);

显然它会抛出 NPE,但是我认为这可能会起作用,因为根据 API 文档:

a coalesce 表达式等效于一个 case 表达式,它如果其所有参数的计算结果都为 null,则返回 null,否则返回其第一个非 null 参数的值。

【问题讨论】:

    标签: java jpa-2.0 criteria-api


    【解决方案1】:

    我认为disjunction 是您正在寻找的。默认情况下它是 false,直到某个真正的谓词被 ored 给它。

    【讨论】:

    • 是的,析取似乎正是我所需要的。以前从未与他们合作过。非常感谢!
    • 在带有 Hibernate 4 的 JPA 2.0 中像魅力一样工作
    【解决方案2】:

    dijunction 在 Eclipselink 2.4 中更复杂的查询中对我不起作用。

    cb.isTrue(cb.literal(false)) 所做的就是尽可能精确地表示 false。

    【讨论】:

    • 感谢分享您的解决方案。 4 年后,人们仍然在寻找 :) 奇怪的是,我在 EclipseLink 上测试了@JB Nizet 提出的解决方案,它确实有效。但那是很久以前的事了。
    猜你喜欢
    • 1970-01-01
    • 2021-11-29
    • 2021-01-24
    • 1970-01-01
    • 2011-09-17
    • 2019-06-22
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多