criteria api where 1<>1 子句

发布于 2024-11-28 07:50:34 字数 133 浏览 1 评论 0 原文

我希望查询不返回任何值。我不能只是不查询数据库,所以我想在谓词中添加一些无法到达的条件,例如“where 1 <>” 1'.但 CriteriaBuilder.equal() 不允许这样做。有什么办法可以达到目标吗?

谢谢。

I want the query not to return any values. I can't just not query database, so I'd like to add some unreachable condition to predicates, something like 'where 1 <> 1'. But the CriteriaBuilder.equal() doesn't allow to do that. Is there any way to reach the goal?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

骄兵必败 2024-12-05 07:50:34

怎么样

CriteriaBuilder.notEqual(CriteriaBuilder.literal(1), 1)

虽然,如果您知道这不应该执行,那么如果数据库无法查看绑定值,那么在某些 RDBMS 上使用表达式可能不是最佳选择。我不知道如何使用内联 1 <> 创建 JPA 谓词1 SQL 表达式,不过...

How about

CriteriaBuilder.notEqual(CriteriaBuilder.literal(1), 1)

Although, if you know that this shouldn't execute, then using expressions might not be optimal on some RDBMS, if the database can't peek at bind values. I don't know how to do create a JPA Predicate with an inlined 1 <> 1 SQL expression, though...

恬淡成诗 2024-12-05 07:50:34

CriteriaBuilder 中的 Javadoc:“创建一个析取(具有零个析取)。具有零个析取的析取是错误的。”

CriteriaBuilder cb..
Predicate itsFalse = cb.disjunction();

然后生成的SQL取决于执行情况,Hibernate生成0=1。为什么我更喜欢这种方法而不是其他替代方法,是:

  1. 根据文档,它非常适合这种用途,而无需
    额外的参数,你可以从名字猜出它的作用。
  2. 它很短。

Javadoc from CriteriaBuilder: "Create a disjunction (with zero disjuncts). A disjunction with zero disjuncts is false."

CriteriaBuilder cb..
Predicate itsFalse = cb.disjunction();

And then generated SQL depends about implementation, Hibernate produces 0=1. Why I prefer this method over other alternatives, is:

  1. According documentation it fits perfectly to this use without
    additional arguments and you kind of guess what it does from name.
  2. It is short.
所有深爱都是秘密 2024-12-05 07:50:34

这个怎么样:

CriteriaBuilder.isTrue(CriteriaBuilder.literal(Boolean.FALSE));

How about this:

CriteriaBuilder.isTrue(CriteriaBuilder.literal(Boolean.FALSE));
俯瞰星空 2024-12-05 07:50:34
criteriaBuilder.isTrue(criteriaBuilder.literal(false));

或者

Specification<TheEntity> specification = (root, query, cb) -> cb.isTrue(cb.literal(false));
criteriaBuilder.isTrue(criteriaBuilder.literal(false));

or

Specification<TheEntity> specification = (root, query, cb) -> cb.isTrue(cb.literal(false));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文