2012-05-29 5 views
7

Tôi đang sử dụng PlayFramework và tôi thực sự thích nó. Khi tôi muốn lấy dữ liệu từ một bảng, ví dụ tôi có một bảng user, tôi sử dụng cú pháp như sau:Tham gia phức tạp bằng cách sử dụng Play Framework và Ebean

List<User> users = User.find.where().eq("email", email).findList(); 

Câu hỏi của tôi là khi tôi nhận được các đối tượng sử dụng, tôi có một cột id. Với giá trị id tôi có thể ánh xạ tới các bảng khác và các bảng của id có thể được ánh xạ tới nhiều bảng hơn nữa, do đó khái niệm cơ bản về việc tham gia trên nhiều bảng. Có bất kỳ ví dụ hoặc nơi tôi có thể đọc nơi nó mô tả làm thế nào để thực hiện điều đó với cú pháp như trên?

Tôi đã cố gắng để tìm thấy bản thân mình và không thể, cách duy nhất tôi có thể nghĩ về nó vào thời điểm này là sử dụng sql thẳng với báo cáo chuẩn bị mà tôi không muốn làm.

Trả lời

16

ellou' kalvish

Relationships giữa các mô hình được thiết lập với các chú thích JPA phổ biến như @OneToMany, @ManyToOne, @OneToOne vv

Vì vậy, nếu bạn có User.java mô hình cho bảng người dùng và Question.java mô hình cho câu hỏi của người dùng, bạn có thể tham gia cùng họ với @OneToMany (Một User có nhiều Question s)

Người dùng

@Entity 
public class User extends Model { 
    @Id 
    public Long id; 

    public String email; 

    @OneToMany 
    public List<Question> questions; 
} 

Câu hỏi

@Entity 
public class Question extends Model { 
    @Id 
    public Long id; 

    public String question; 
} 

Khi bạn sẽ chọn một người dùng trong điều khiển, Ebean sẽ biểu diễn 'tham gia' theo mặc định và sẽ lấy câu hỏi tất cả người dùng cũng như:

User user = User.find.where().eq("email", email).findUnique(); 
List<Question> usersQuestion = user.questions; 

Theo mặc định Ebean lấy tất cả các thuộc tính và quan hệ của đối tượng, vì vậy bạn không cần phải tạo các truy vấn phụ. Tất nhiên bạn có thể hoặc thậm chí nên chọn/chỉ lấy dữ liệu được yêu cầu tại thời điểm này.

Tại official Ebean documentation page bạn sẽ tìm thấy khá tốt Hướng dẫn tham khảo (pdf), mô tả chung về mối quan hệ có sẵn trong phần 11.6.2 Relationships.

Trong phần 4.1.2 Query có ví dụ (thứ hai) mà chứng minh làm thế nào để có được "một phần" đối tượng với việc sử dụng select()fetch()

+1

Hi Marcus, Cảm ơn trả lời của bạn. Tôi đã nhìn vào hướng dẫn chỉ cần bây giờ, và tôi tự hỏi nếu tôi có thể hỏi bạn một câu hỏi về nó ... phần 4.1.5 là mô tả OneToMany, ManyToOne, vv Nhưng làm thế nào để nó biết các cột bản đồ? Giả sử tôi có một cột 'myId' và ánh xạ tới một cột' id' trong một bảng khác, có cách nào để xác định điều đó không? – KVISH

+0

Ebean đủ để tạo ra DDL thích hợp về sự thay đổi của mô hình. Hãy coi chừng điều này trong trường hợp thực sự, nhưng nó thực sự là ý tưởng hay, để tạo ra các dự án thử nghiệm khác và chỉ tìm hiểu nó trực tiếp từ Ebean – biesior

+0

@KVISH Tôi nghĩ những gì bạn đang tìm kiếm là chú thích JPA @ JoinColumn nơi bạn có thể chỉ định tên của cột nối để sử dụng. –