0

我需要向 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);
4

3 回答 3

2

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

于 2014-05-26T18:17:16.637 回答
0

我的案例的解决方案(调用 Oracle 函数'bitand')

   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);
于 2014-05-27T11:42:32.333 回答
0

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

  • 在您的 Hibernate 实体中实现您需要做的任何事情,但我想您已经尝试过并且正在这里寻找其他解决方案
  • 将整个查询重写为 SQL
  • 一个更有创意的方法:在数据库视图上定义一个新的 Hibernate 实体,执行查询的“精细”部分,其余部分通过 Criteria 进行管理。
于 2014-05-26T17:13:06.300 回答