我需要通过JPA在代码中调用自定义SQL函数。该函数使用纯SQL编写,并返回具有单个布尔值的关系。
换句话说,我需要JPA实现来调用以下select:
select function_xy(p1, p2);
首次实施:
final CriteriaBuilder cb = em.getCriteriaBuilder();
final CriteriaQuery<Boolean> criteriaQuery = cb.createQuery(Boolean.class);
final Expression<Boolean> func = cb.function("function_xy", Boolean.class,
cb.literal("bla bla"), cb.literal(someEntity.getId()));
criteriaQuery.select(func);
final TypedQuery<Boolean> query = em.createQuery(criteriaQuery);
final List<Boolean> result = query.getResultList();
return ResourceUtils.getSingleResult(result);
这会引发异常:“没有指定条件查询根”
答案 0 :(得分:0)
Criteria api方法“function”不能用于在没有from子句的select中调用函数。
而是使用本机查询:
final List<Object> result = em.createNativeQuery("select function_xy(:p1, :p2)")
.setParameter("p1", "bla bla")
.setParameter("p2", someEntity.getId())
.getResultList();
return (Boolean) ResourceUtils.getSingleResult(result);