2016-06-22 5 views
0

JPA経由でコード内にカスタムSQL関数を呼び出す必要があります。関数は純粋なSQLで記述され、単一のブール値を持つリレーションを返します。JPAを使用してfrom句なしでselectを行う方法

select function_xy(p1, p2); 

最初の実装::私は選択以下呼び出すためにJPA実装を必要と言い換える

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

を "いいえ基準クエリの根が指定されませんでした" 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); 
関連する問題