Java 如何使用JPA生成select WITH from子句

Java 如何使用JPA生成select WITH from子句,java,sql,postgresql,jpa,Java,Sql,Postgresql,Jpa,我需要通过JPA在代码中调用自定义SQL函数。该函数是用纯SQL编写的,返回带有单个布尔值的关系 换句话说,我需要JPA实现来调用以下选择: select function_xy(p1, p2); 第一次实施: final CriteriaBuilder cb = em.getCriteriaBuilder(); final CriteriaQuery<Boolean> criteriaQuery = cb.createQuery(Boolean.class);

我需要通过JPA在代码中调用自定义SQL函数。该函数是用纯SQL编写的,返回带有单个布尔值的关系

换句话说,我需要JPA实现来调用以下选择:

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);
final CriteriaBuilder cb=em.getCriteriaBuilder();
final-CriteriaQuery-CriteriaQuery=cb.createQuery(Boolean.class);
最终表达式func=cb.function(“function_xy”,Boolean.class,
cb.literal(“bla-bla”),cb.literal(someEntity.getId());
criteriaQuery.select(func);
final TypedQuery query=em.createQuery(criteriaQuery);
最终列表结果=query.getResultList();
返回ResourceUtils.getSingleResult(结果);
这引发了一个异常:“未指定任何条件查询根”

条件api方法“函数”不能用于在没有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);
final List result=em.createNativeQuery(“选择函数_xy(:p1,:p2)”)
.setParameter(“p1”、“bla bla”)
.setParameter(“p2”,someEntity.getId())
.getResultList();
返回(布尔)ResourceUtils.getSingleResult(结果);
如果没有from子句,则无法使用标准api方法“函数”调用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);
final List result=em.createNativeQuery(“选择函数_xy(:p1,:p2)”)
.setParameter(“p1”、“bla bla”)
.setParameter(“p2”,someEntity.getId())
.getResultList();
返回(布尔)ResourceUtils.getSingleResult(结果);