Sử dụng annotation @OneToMany trong JPA

Giả sử các bạn đang làm trong một dự án mà database có 2 bảng, ví dụ như studentclazz có cấu trúc như sau:

Như các bạn thấy, bảng clazz có các cột id, name với primary key là cột id. Bảng student thì có các cột id, name và clazz_id với primary key là id. Trong bảng student này, chúng ta cũng đã định nghĩa một foreign key từ nó tới bảng clazz với ý nghĩa một lớp có thể có nhiều sinh viên, và nhiều sinh viên thì có thể được xếp vào một lớp. Trong JPA, để thể hiện mối quan hệ nhiều sinh viên có cùng lớp, chúng ta sẽ sử dụng annotation @ManyToOne, còn để thể hiện mối quan hệ một lớp có nhiều sinh viên thì chúng ta sẽ sử dụng annotation @OneToMany.

Chúng ta đã tìm hiểu về annotation @ManyToOne trong bài viết trước, bài viết này mình sẽ cùng với các bạn tìm hiểu về annotation @OneToMany các bạn nhé!

Đầu tiên, mình sẽ tạo một Maven project lấy ví dụ ở trên để làm minh họa:

Sử dụng annotation @OneToMany trong JPA

Mình sẽ thêm dependency của Hibernate để sử dụng JPA như sau:

Trong ví dụ này, mình làm việc với MySQL nên mình cũng sẽ thêm dependency của MySQL Driver như sau:

Tiếp theo, mình sẽ tạo các entity ClazzStudent để thể hiện thông tin của chúng.

Sử dụng annotation @OneToMany trong JPA

Nội dung của entity Clazz lúc này như sau:

và entity Student:

Bây giờ, chúng ta sẽ sử dụng annotation @OneToMany để thể hiện mối quan hệ của bảng clazz với bảng student trong JPA các bạn nhé!

Bởi vì, đây là mối quan hệ một – nhiều nhìn từ đối tượng Clazz nên mình sẽ đặt annotation @OneToMany trong đối tượng Clazz, cụ thể như sau:

Như các bạn thấy, trong annotation này, mình đã khai báo một thuộc tính là mappedBy với giá trị là clazz. Giá trị “clazz” ở đây là tên biến được định nghĩa với annotation @ManyToOne trong entity Student.

Đến đây, chúng ta đã hoàn thành việc sử dụng annotation @OneToMany để định nghĩa trong entity Clazz rồi. Mình sẽ thử làm ví dụ để xem nó hoạt động thế nào nhé các bạn!

Mình sẽ thêm một tập tin cấu hình persistence.xml:

Sử dụng annotation @OneToMany trong JPA

với nội dung như sau:

Giả sử, bây giờ trong database, mình có những dữ liệu như sau:

Sử dụng annotation @OneToMany trong JPA

thì với đoạn code này:

Kết quả sẽ như sau:

Sử dụng annotation @OneToMany trong JPA

 

Tham khảo project trên GitHub: https://github.com/huongdanjavacom/huongdanjava.com/tree/master/jpa-onetomany


4.7/5 - (3 bình chọn)

5 thoughts on “Sử dụng annotation @OneToMany trong JPA

  1. Hi anh Khanh, anh cho em hỏi ví dụ giờ em muốn xóa Class A có id là 1 đó thì nó xóa luôn cả 2 Student trong Class đó.
    giờ em muốn xóa được nó thì mà 2 Student kia không bị mất đi, claszz_id chuyển về lại thành null. Thì làm thế nào a?

    1. Cái này có thể giải quyết bằng cách khi tạo bảng và tạo foreign key, em thêm “ON DELETE SET NULL” nữa là được nhé.

      Ví dụ như sau:

      FOREIGN KEY (
      clazz_id) REFERENCES clazz (id) ON DELETE SET NULL

  2. Chào anh,
    Em đọc những bài hướng dẫn của anh và em cảm thấy rất thú vị.
    Em cũng đang tự học Spring và có rất nhiều khó khăn, liệu anh có thể giúp đỡ em không ạ? nếu có thì em có thể liên hệ anh bằng cách nào?
    Cảm ơn!

    1. Bạn có thể gửi bất kỳ câu hỏi nào tới Khanh, bạn nhé!

      Dùng form Liên hệ trên Menu hoặc post câu hỏi trong group Cộng Đồng Hướng Dẫn Java là được.

      Cảm ơn bạn đã ủng hộ Hướng Dẫn Java! 😀

Add Comment