标准api其中1 <> 1条款

Vla*_*nov 6 java criteria-api

我希望查询不返回任何值.我不能不查询数据库,所以我想为谓词添加一些无法访问的条件,比如'where 1 <> 1'.但CriteriaBuilder.equal()不允许这样做.有没有办法达成目标?

谢谢.

Luk*_*der 8

怎么样

CriteriaBuilder.notEqual(CriteriaBuilder.literal(1), 1)
Run Code Online (Sandbox Code Playgroud)

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


Ste*_*n C 6

这个怎么样:

CriteriaBuilder.isTrue(CriteriaBuilder.literal(Boolean.FALSE));
Run Code Online (Sandbox Code Playgroud)


Mik*_*unu 6

来自CriteriaBuilder的Javadoc:"创建一个析取(零分离).零分离的断开是错误的."

CriteriaBuilder cb..
Predicate itsFalse = cb.disjunction();
Run Code Online (Sandbox Code Playgroud)

然后生成的SQL依赖于实现,Hibernate产生0 = 1.为什么我更喜欢这种方法而不是其他选择,是:

  1. 根据文档,它完全适合这种使用,没有额外的参数,你可以猜测它从名称做什么.
  2. 它很短.