2010-06-07 2 views
1

Hibernate와 JPA2 Criteria Builder [1]를 사용하여 엔티티의 멤버가 아닌 메소드의 결과로 주문할 수 있습니까?JPA2 + Hibernate + Order By

 
public class X { 
    protected X() {} 
    public String member; 
    public String getEvaluatedValue() { // order by 
     return "a status calculated with various members"; 
    } 
} 

내가 원하는 것은 getEvaluatedValue()의 결과에 의한 주문입니다. 그게 가능하니?

고맙습니다.

편집 : 추가 답변.

내가 @Formular를 사용하지 않는

하지만 일반 JPA2은 확실히 당신이 바로 동적 데이터로 주문 할 기회가없는 나는 비록

 
EntityManager em = ...; 
QueryBuilder builder = em.getQueryBuilder(); 
SomeQueryClass query = builder.createQuery(MyTargetClass.class); 
query.orderBy(builder.asc(... some code...)); 

. 그러나 if-else 또는 어떤 명령문 (QueryBuilder로 정의)을 사용하여 order-by 블록을 지정하도록 허용 할 수 있습니까?

[1] http://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html_single/#querycriteria

답변

0

가능한 경우 나도 몰라 (속성은 SQL의 결과 일해야하는지 데이터베이스의 표현을하지 않는 과도 즉 경우?)하지만, 더 중요한 것은, "some test " + membermember의 주문 사이의 차이점은 무엇입니까? 어쩌면 그게 가능하지 않을 수 있습니다처럼하지만 ...

+0

그것은 물론 단지 일례이다 :

은 EvaluatedValue Comparable를 구현하는 유형 만들기. 문제는 다양한 멤버에 따라 이벤트 상태를 계산해야한다는 것입니다. 계산되기 때문에 정렬 목적으로 데이터베이스에 저장하는 것은 의미가 없습니다. – Jan

+1

@Jan 네, 그렇습니다. 그러나 나는 데이터베이스가 어쨌든 결과 정렬에 좋은 역할을 할 것이라고 생각하지 않는다. 왜냐하면 색인의 부족 때문이다. 내 이해가 당신이'@ Formula'를 사용하고 있고 평범한 JPA2.0을 사용하고 있지 않기 때문에 좀 더 파헤쳐 보겠다. (그래서 아마도 최대 절전 모드 일 것이다.) –

+0

회신을위한 초기 게시물보기 – Jan

0

이러한 이유로, 보이는 단지 예입니다 : 쿼리가 SQL 층에서 실행되는 경우, "EvaluatedValue"필드가 을 계산되지 않습니다. 나중에 만 채워집니다 (정확히 알 수 없으면 엔티티가 라지 모드를 사용하는지 여부에 따라 달라질 수 있습니다). JPA Query 개체는 SQL과 밀접하게 관련되어 있습니다 (즉, 데이터베이스에있는 개체).

아마, 내가 getResultList()와 비 분류 결과를 얻을 것이다, 수동으로 정렬 : see here