Java 将SQL条件添加到CriteriaQuery
我需要向CriteriaQuery添加类似于Restrictions.sqlRestriction的内容。如何将SQL条件添加到CriteriaQuery 我的代码:Java 将SQL条件添加到CriteriaQuery,java,jpa,criteria-api,criteriaquery,Java,Jpa,Criteria Api,Criteriaquery,我需要向CriteriaQuery添加类似于Restrictions.sqlRestriction的内容。如何将SQL条件添加到CriteriaQuery 我的代码: CriteriaBuilder criteriaBuilder=entityManager.getCriteriaBuilder(); CriteriaQuery<Installation> criteriaQuery = criteriaBuilder.createQuery(Test.class); Root<
CriteriaBuilder criteriaBuilder=entityManager.getCriteriaBuilder();
CriteriaQuery<Installation> criteriaQuery = criteriaBuilder.createQuery(Test.class);
Root<Installation> root = criteriaQuery.from(Test.class);
criteriaQuery.select(root);
CriteriaBuilder-CriteriaBuilder=entityManager.getCriteriaBuilder();
CriteriaQuery-CriteriaQuery=criteriaBuilder.createQuery(Test.class);
Root=criteriaQuery.from(Test.class);
criteriaQuery.select(root);
我不确定能不能做到。我建议您选择以下3个选项:
- 在您的Hibernate实体中实现您需要做的任何事情,但我想您已经尝试过,并且正在寻找其他解决方案
- 将整个查询重新编写为SQL
- 一个更具创造性的方法是:在数据库视图上定义一个新的Hibernate实体,执行查询的“微妙”部分,其余部分由条件管理李>
function()
,或具有JPQL等价物的其他子句。既然您没有说什么是“SQL条件”,那么就只能说这些了。您当然不能将一些随机SQL转储到JPQL筛选器中,例如,我的案例的解决方案(调用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=em.createQuery(criteriaQuery.select(root));
query.setParameter(“状态”,1L);
我需要在int字段中使用Oracle SQL函数“bitand”,因此使用JPA 2.1“function”关键字,可通过CriteriaBuilder获得,这样您就不需要“SQL”了
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);