2009-06-24 37 views
6

Tôi có một lớp nói: "ClassA" trong đó có một bộ sưu tập các "ClassB"Hibernate @OrderBy với lớp tham chiếu

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
@JoinColumn(name = "COLUMN_NAME")  
private List<ClassB> lotsOfClasses; 

"ClassB" có một lớp ánh xạ "ClassC" sử dụng đồng bằng chú thích bản đồ cũ:

public class ClassB { 
... 
    @ManyToOne 
    @JoinColumn(name="AD_POINT_ID") 
    private ClassC classC; 
... 
} 

làm thế nào để thêm một chú thích @OrderBy vào bộ sưu tập ClassA để ClassB, do đó bộ sưu tập được sắp xếp theo "tên" tài sản của ClassC

Giống như vậy:

@OrderBy(clause="classC.name asc") 

Tất cả những gì tôi nhận được là ngoại lệ của Oracle nói rằng classC không xác định.

Bất kỳ trợ giúp nào ở đây đều tuyệt vời, vì nó thực sự làm tôi thất vọng vào lúc này.

P.S. Tôi cũng nên đề cập rằng sử dụng chú thích OrderBy trên bộ sưu tập như thế này: @OrderBy (khoản = "classC asc") (nghĩa là không có .name trên classC) Tôi nhận được một câu lệnh SQL hợp lệ, sử dụng cột ID (khóa chính) của classC để sắp xếp theo.

Chúc mừng, Đánh dấu

+0

Theo đề nghị của Jiří Vypědřík bạn có thể thực hiện giao diện java.util.Comparator. Trong phương thức so sánh được triển khai, bạn có thể thực hiện logic để tham chiếu đến đối tượng Hibernate Mapped mà không có vấn đề, và trả về giá trị int tương ứng. Tuy nhiên, điều này sẽ không sử dụng thứ tự trên Oracle DB nhưng trong bộ nhớ (JVM) sắp xếp thay thế. – prageeth

Trả lời

7

Thật không may là không thể làm những gì bạn muốn. Tôi đã trả lời một câu hỏi tương tự here.

@OrderBy chỉ hỗ trợ trực tiếp thuộc tính của phần tử thu thập.

-1

tôi chỉ biết NHibernate (phiên bản .NET), nhưng tôi đoán nó cũng làm việc tương tự:

@OrderBy(clause = "name asc") 

Hoặc bạn có thể thử điều này:

@OrderBy("name") 
+0

Nhưng đó sẽ là thuộc tính 'tên' của ClassB, tôi cần thuộc tính tên của ClassC – Mark

1

Điều này có thể xảy ra nếu bạn sử dụng JPA. Xem này article.

Sau đó, bạn chỉ cần thêm @OrderBy("name") đến tài sản thu

3

sử dụng @Sort với so sánh tùy chỉnh thay

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