2016-06-22 9 views
0

Ich muss eine benutzerdefinierte SQL-Funktion im Code über JPA aufrufen. Die Funktion ist in reinem SQL geschrieben und gibt die Beziehung mit einem einzelnen booleschen Wert zurück.So wählen Sie ohne from Klausel mit JPA

Mit anderen Worten muss ich JPA-Implementierung folgende wählen aufzurufen:

select function_xy(p1, p2); 

Erste Implementierung:

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

Dies löst eine Ausnahme aus: "Keine Kriterien abfragen Wurzeln angegeben wurden"

Antwort

0

Kriterien api-Methode "function" kann nicht verwendet werden, um Funktionen in einem select-Objekt ohne eine from-Klausel aufzurufen.

Verwenden Sie stattdessen eine native Abfrage:

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); 
Verwandte Themen