2009-01-02 60 views
5

Vì vậy, nếu truy vấn JPA của tôi là như thế này: Chọn p khác biệt với p trái Chánh tham gia lấy trật tự p.children bởi p.somePropertyThứ tự trở lại của trẻ em các đối tượng trong JPA truy vấn

tôi một cách chính xác được kết quả lại ra lệnh bởi p .someProperty và tôi đã nhận được bộ sưu tập p.children của tôi một cách háo hức được tìm nạp và phổ biến. Nhưng tôi muốn có truy vấn của tôi là một cái gì đó như "order by p.someProperty, p.children.someChildProperty" để các bộ sưu tập cư trú bên trong mỗi đối tượng cha mẹ được sub-ordered bởi someChildProperty.

Điều này có vẻ trực quan khi tôi nghĩ về sql thực sự được tạo cho các cuộc gọi này, nhưng tôi đoán ít hơn khi nó cố gắng ánh xạ trở lại đối tượng phân cấp.

Trả lời

13

Để giữ gìn trật tự, hãy sử dụng TreeSet. Theo như sắp xếp của một bộ sưu tập bên trong cha mẹ là có liên quan, chỉ cần làm điều đó trong mã của bạn bằng cách sử dụng Comparator.

Vâng, hãy thử điều này trên định nghĩa bộ sưu tập của bạn trong lớp thực thể cha mẹ của bạn. Tôi hy vọng bạn đang nhận được quan điểm của tôi.

Bạn có thể sử dụng chú thích JPA này,

@javax.persistence.OrderBy(value = "fieldName") 

hoặc Hibernate cụ thể này,

@org.hibernate.annotations.OrderBy(clause = "FIELD_NAME asc") 

và bạn cũng có thể sử dụng này,

@org.hibernate.annotations.Sort(type = SortType.NATURAL) 

hoặc

@org.hibernate.annotations.Sort(type = SortType.COMPARATOR) 

Trong trường hợp so sánh, phải có trình so sánh. Khác có thể chỉ làm việc với các bộ sưu tập String.

+0

làm phương án thay thế chung, bạn có thể sử dụng chú thích javax: @ javax.persistence.OrderBy (value = "fieldName") –

+0

@James: Cảm ơn bạn thân, đã cập nhật. –

1

Adeel về cơ bản đã đóng đinh này. Bạn cũng có thể sử dụng những danh sách có Danh sách có thể quan trọng nếu bộ sưu tập của bạn chứa cùng một thực thể nhiều lần.

Các vấn đề liên quan