2009-07-09 46 views
8

Tôi gặp sự cố sau. Tôi có ba lớp, A, B và C. A chứa một danh sách liên quan đến OneToMany của B: s. B chứa một quan hệ ManyToOne với C. C chứa một trường có tên là "name" và B cũng chứa một trường có tên là "name". Những gì tôi muốn thực hiện là để có các mục trong danh sách của A sắp xếp chủ yếu bằng tên của C và thứ hai bằng tên B - vấn đề là tôi không biết làm thế nào để làm điều này. Thậm chí có thể không?Xác định thứ tự của danh sách

Tôi đang sử dụng EclipseLink làm nhà cung cấp JPA của mình.


class A { 
    @OneToMany 
    @OrderBy("b.c.name, b.name") <---- this is the problem 
    List<B> b; 
} 

class B { 
    @ManyToOne 
    C c; 
    String name; 
} 

class C { 
    String name; 
} 

EDIT Vâng, tôi đã cố gắng biến thể khác nhau, ví dụ @OrderBy ("c.name") không làm việc, tôi chỉ nhận được một thông báo lỗi nói với tôi rằng các lớp thực thể b không chứa một trường được gọi là "c.name".

Trả lời

9

KHÔNG thể. @OrderBy chỉ chấp nhận tên thuộc tính/trường trực tiếp, không phải thuộc tính lồng nhau. Có nghĩa là, thực sự, bởi vì "c" bảng - tùy thuộc vào chiến lược tìm nạp của bạn có thể thậm chí không phải là một phần của một lựa chọn ban hành để lấy "b" s của bạn.

0

Bạn đã thử @OrderBy("c.name", "name") chưa?

Bạn không nên sử dụng "b". bởi vì nó ngụ ý rằng @OrderBy sẽ được thực hiện trên các cột của các cá thể của B trên mảng b.

0

Các bạn đã thử:

@OrderBy("c.name ASC", "name ASC") 

?

2

ChssPly76 là đúng.

gì bạn có thể làm là tạo ra một truy vấn có tên như thế này:

SELECT b 
FROM B b 
WHERE b.a = :mya 
ORDER BY b.c.name 
Các vấn đề liên quan