标准api其中1< 1>条款

时间:2011-08-08 10:54:49

标签: java criteria-api

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

感谢。

3 个答案:

答案 0 :(得分:8)

怎么样

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

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

答案 1 :(得分:6)

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

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

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

  1. 根据文件,它完全适合这种用途 其他参数,你可以从名称中猜出它的作用。
  2. 很短。

答案 2 :(得分:3)

这个怎么样:

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