将SQL条件添加到CriteriaQuery

时间:2014-05-26 17:05:18

标签: java jpa criteria-api criteriaquery

我需要在CriteriaQuery中添加类似Restrictions.sqlRestriction的内容。如何将SQL条件添加到CriteriaQuery?

我的代码:

CriteriaBuilder criteriaBuilder=entityManager.getCriteriaBuilder();
CriteriaQuery<Installation> criteriaQuery = criteriaBuilder.createQuery(Test.class);
Root<Installation> root = criteriaQuery.from(Test.class);
criteriaQuery.select(root);

3 个答案:

答案 0 :(得分:2)

JPA Criteria允许使用function()或其他具有JPQL等效项的子句。既然你没有说出什么是“SQL条件”那么就可以说了。你当然不能将一些随机SQL转储到JPQL过滤器中,例如

答案 1 :(得分:0)

我不确定是否可以做到。我建议你这3个选项:

  • 在你的Hibernate实体中实现你需要做的任何事情,但我想你已经尝试过,并且正在寻找其他解决方案
  • 将整个查询重写为SQL
  • 更具创造性的一个:在数据库视图中定义一个新的Hibernate实体,以实现“微妙”的功能。您的查询的一部分,其余部分通过Criteria进行管理。

答案 2 :(得分:0)

解决我的问题(调用Oracle函数&#39; bitand&#39;)

   criteriaQuery.where(criteriaBuilder.notEqual(criteriaBuilder.function("bitand", Long.class, root.get(Test_.status).get(Status_.id), criteriaBuilder.parameter(Long.class, "status")),0));
   TypedQuery<Installation> query = em.createQuery(criteriaQuery.select(root));
   query.setParameter("status", 1L);