2012-04-14 3 views

답변

0

org.hibernate.SQLQuery를 사용하면 Hibernate를 사용하여 원시 SQL 쿼리를 생성 할 수 있습니다. 그런 다음 일반적인 Hibernate 쿼리에서와 같은 방법으로이 쿼리를 실행한다. 분명히 당신은 Hibernate와 JPA가 질의를 관리하게하는 많은 이점을 잃을 것이다. 그러나 그들이 원하는 기능을 지원하지 않는다면, 그것을 할 수있는 유일한 방법 일 수있다. 매핑 된 실체가없는 경우

1

당신은 네이티브 쿼리를 사용해야합니다 :

Query query = entityManager 
     .createQuery(
      "SELECT t.*, myfunction(:parameter) FROM table t WHERE t.attr = condition"); 
query.setParameter("parameter", value); 
List resultList = query.getResultList(); 

을 그렇지 않으면, 매핑 된 엔티티가있을 경우 입력 한 쿼리 또는 기준 API를 사용하여이 작업을 수행 할 수 있습니다.

TypedQuery<Object[]> query = entityManager 
     .createQuery(
      "SELECT t.*, FUNC('MyFunction', :parameter) FROM table t WHERE t.attr = condition", 
      Object[].class); 
query.setParameter("parameter", value); 
List<Object[]> resultList = query.getResultList(); 

기준 API와 : 입력 된 쿼리와

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); 
CriteriaQuery<Tuple> query = criteriaBuilder.createTupleQuery(); 
Root<Table> root = query.from(Table.class); 
Expression<Long> funcExpr = criteriaBuilder.function("myfunction", 
     Long.class, root.get("parameter")); 
query.multiselect(query.select(root), funcExpr); 
List<Tuple> resultList = entityManager.createQuery(query) 
     .getResultList(); 
0

또 다른 솔루션을 사용하면 테이블의 일부 필드에 함수를 호출하는 경우, 수식을 사용하는 것입니다, 당신은 항상 원하는 함수의 결과로 엔티티의 다른 속성을 매핑하고 @Formula("myFunction(field1, field2)")으로 주석을 달 수 있습니다. Hibernate는 엔티티가있는 모든 질의에 이것을 추가 할 것이다.