如何使用JPA进行select而不使用from子句

时间:2016-06-22 18:11:15

标签: java sql postgresql jpa

我需要通过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);

这会引发异常:“没有指定条件查询根”

1 个答案:

答案 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);