我希望查询不返回任何值。我不能只是不查询数据库,所以我想为谓词添加一些无法访问的条件,比如'where 1<> 1。但CriteriaBuilder.equal()不允许这样做。有没有办法达成目标?
感谢。
答案 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。为什么我更喜欢这种方法而不是其他选择,是:
答案 2 :(得分:3)
这个怎么样:
CriteriaBuilder.isTrue(CriteriaBuilder.literal(Boolean.FALSE));