2010-05-25 40 views
5

Chỉ cần một câu hỏi nhanh:séc JPQL nhiều-nhiều mối quan hệ

Có thực thể (ví dụ tài khoản), người được kết nối với các mối quan hệ ManyToMany cùng một đối tượng (ví dụ mối quan hệ này mô tả "tình bạn" và nó là đối xứng).

Cách nhanh nhất về thời gian thực hiện để kiểm tra xem Người dùng A có phải là "người bạn" của người dùng B không? Cách "câm" sẽ là lấy toàn bộ Danh sách và sau đó kiểm tra xem người dùng có tồn tại ở đó không nhưng đó rõ ràng là chi phí.

Tôi đang sử dụng JPA 2

Dưới đây là đoạn code mẫu:

@Entity 
@Table(name="users") 
public class UserEntity { 
    @ManyToMany(fetch = FetchType.LAZY) 
    private List<UserEntity> friends; 

    .... 
} 

Trả lời

6

Nếu bạn không muốn lấy toàn bộ danh sách, những gì về việc sử dụng một MEMBER OF? Một cái gì đó như thế này:

SELECT user FROM UserEntity user WHERE :friend MEMBER OF user.friends 

Điều đó sẽ cung cấp cho bạn tất cả những người có B làm bạn. Nếu bạn muốn giới hạn kết quả thành A, hãy thêm điều kiện trong mệnh đề WHERE.

Không chắc chắn đó là cách tốt nhất để đạt được những gì bạn muốn. Cách tiếp cận "câm" không thật sự ngu ngốc.

+0

Cảm ơn! Đây chính xác là những gì tôi cần. Bạn cũng có thể đề xuất cách sửa đổi truy vấn nếu: bạn là id, không phải tham chiếu Thực thể không? Tôi xin lỗi vì câu hỏi đơn giản nhưng tôi bị mất một chút trong JPQL :-) – Juriy

+0

Đừng bận tâm :-) đã tìm thấy. – Juriy

+0

@Juriy bạn có thể chia sẻ giải pháp mà bạn tìm thấy không? – stivlo

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