2010-03-03 5 views
6

나는 id, name, wins, games_played 열이있는 테이블 플레이어가 있습니다. 그것을 Player 클래스에 매핑했습니다. 나는 (HQL도 도움이 될 것입니다 기준으로 가능하지 않은 경우, 바람직 기준)최대 절전 모드에서 계산 된 값으로 결과 정렬

선택 * 플레이어 순서에서로 (승리가/ 가 games_played)

I를 최대 절전 모드에서 다음 쿼리를 수행 할 List < 플레이어 >의 승률로 정렬됩니다. 답 최대 절전 모드의 문서에서

팔로

답변

9

Hibernate는 order by 절에있는 연산 식을 지원하지 않는다. Hibernate 문서의 섹션 14.12. The group by clause을 인용하기 :

group by 절도 order by 절도 산술 표현식을 포함 할 수 없다.

그리고 실제로, 제대로 반환하지 않습니다 다음 HQL 질의 주문한 결과 :

select p from Player p order by (p.wins/p.gamesPlayed) 

그리고 난 당신이 그렇게 기준 API는이 문제를 해결하지 않을 것이다 org.hibernate.criterion.Property를 나눌 수 있다고 생각하지 않습니다.

그래서 주석과 함께 예를 들어, (공식으로) 계산 된 속성을 사용하는 것이 좋을 것 :

session.createCriteria(Player.class).addOrder(Order.desc("ratio")) 
+1

이 기능은 .NET에서 Fluent 매핑이 Formula() 메소드를 사용하여 작동합니다. – andypaxo

2

에 대한

감사합니다 - 그들은 기본 데이터베이스에 의해 지원되는 경우

SQL 함수들과 집계 기능이 조항에 의해 가지고 순서대로 사용할 수 있습니다 . 의미

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-ordering

당신은 당신의 기본 데이터베이스를 기반으로 그것을 할 필요가있다.

+1

감사 :

private float wins; private float gamesPlayed; @Formula(value = "WINS/GAMESPLAYED") private float ratio; 

이는 기준 API와 다음 쿼리를 허용 것 당신은 답을 구하십시오. 기준을 사용하여이를 수행하는 방법을 알고 있습니까? – Palo

+0

-1 : 질문은 *에 의해 순서대로 지원되지 않는 * 산술 표현식 * (SQL 함수 또는 집계 함수가 아님)입니다. –

관련 문제