2010-03-03 23 views
6

Tôi có một Trình phát Bảng có các cột id, name, wins, games_played. Tôi ánh xạ nó với một Player lớp. tôi muốn làm các truy vấn sau đây trong Hibernate (tốt nhất với tiêu chuẩn, nếu không có thể với Tiêu chuẩn HQL cũng sẽ giúp)Sắp xếp kết quả theo giá trị tính toán trong Hibernate

select * from trật tự Player bằng (thắng/ games_played)

tôi mong đợi nhận được Danh sách < Người chơi > được sắp xếp theo tỷ lệ thắng của họ.

Cảm ơn cho câu trả lời

Palo

Trả lời

9

Hibernate không hỗ trợ biểu thức arithmetics theo thứ tự theo mệnh đề. Trích dẫn phần 14.12. The group by clause của tài liệu Hibernate:

Không có nhóm theo mệnh đề cũng như thứ tự theo mệnh đề có thể chứa biểu thức số học.

Và quả thực, truy vấn HQL sau đây sẽ không trả lại đúng yêu cầu kết quả:

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

Và tôi không nghĩ rằng bạn có thể chia org.hibernate.criterion.Property nên API Tiêu chuẩn sẽ không giải quyết này.

Vì vậy, tôi muốn đề nghị sử dụng một thuộc tính tính toán (với một công thức), ví dụ với chú thích:

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

này sẽ cho phép các truy vấn sau đây với các API Tiêu chí:

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

Điều này cũng hoạt động trong .NET với ánh xạ thông thạo bằng cách sử dụng phương thức Formula(). – andypaxo

2

Từ các tài liệu Hibernate -

chức năng SQL và chức năng tổng hợp được phép theo thứ tự có và các khoản nếu họ được hỗ trợ bởi cơ sở dữ liệu cơ bản .

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

Có nghĩa là bạn cần phải làm điều đó dựa trên cơ sở dữ liệu cơ bản của bạn.

+1

Thank bạn cho câu trả lời. Bạn có bất kỳ ý tưởng làm thế nào để làm điều này với tiêu chí? – Palo

+0

-1: Câu hỏi là về * biểu thức số học * (chứ không phải hàm SQL hoặc hàm tổng hợp) được ** KHÔNG ** hỗ trợ theo thứ tự. –