2012-11-16 21 views
8

Tôi có hai lớp, người dùng và ô tô. Cả hai đều có ánh xạ ManyToMany với nhau.Truy vấn ManyToMany của Ebean

User:

@Entity 
public class User extends Model { 

    private int year; 

    @ManyToMany(cascade=CascadeType.ALL) 
    private List<Car> cars; 
} 

xe:

@Entity 
public class Car extends Model { 
    @ManyToMany(mappedBy = "cars", cascade=CascadeType.ALL) 
    private List<User> users; 
} 

Sử dụng ebean, tôi muốn truy vấn chỉ có những chiếc xe từ năm 1999 có cung cấp cho người dùng trong danh sách của họ. Tôi không muốn lặp qua danh sách xe của người dùng trong mã Java.

Tôi không tìm thấy bất kỳ tài liệu nào có bao nhiêu truy vấn sẽ giống như thế nào. Vì vậy, tôi sẽ như thế này:

public List<Car> findCars(int year, User user) { 
    return Car.find.where().eq("year", int).eq("users", user).findList(); 
} 

Điều này có thể xảy ra với Ebean không?

Trả lời

11

Kiểm tra tương tự question (and answer)

lẽ Hầu hết các công cụ tìm của bạn sẽ giống như thế:

public List<Car> findCars(int year, User user) { 
    return find.where().eq("year", year).eq("users.id", user.id).findList(); 
} 

BTW tôi giả sử rằng bạn có một số lĩnh vực id nhưng chỉ không chỉ cho chúng ta. Ngoài ra, hãy đặt trường của bạn ở chế độ công khai, vì vậy bạn sẽ không cần viết getters/setters cho mỗi trường.

+0

Tôi đã sử dụng các trường riêng tư vì tôi gặp phải các vấn đề khi làm bài kiểm tra mà không cần sử dụng getters/setters. http://stackoverflow.com/questions/13011874/why-ebean-returns-null-for-no-reason –

+0

Có trường riêng, bạn cần viết getters công cộng, đó là bình thường – biesior

+0

Rõ ràng :-) Nhưng liên kết trong của tôi bình luận mô tả lỗi/tính năng trong Ebean/Play 2 combo tôi đã đề cập đến. –