Composite Primary Key trong JPA với annotation @IdClass

Trong bài viết trước, mình đã giới thiệu với các bạn cách thể hiện Composite Primary Key trong JPA sử dụng annotation @Embeddable. Ngoài cách này ra, chúng ta còn có một cách để thể hiện Composite Primary Key trong JPA đó chính là sử dụng annotation @IdClass. Cụ thể như thế nào? Chúng ta hãy cùng nhau tìm hiểu trong bài viết này nhé các bạn.

Đầu tiên, mình cũng tạo một Maven project để làm ví dụ:

Composite Primary Key trong JPA với annotation @IdClass
Mình sẽ sử dụng Hibernate làm implementation của JPA nên sẽ thêm Hibernate dependency như sau:

MySQL Connector:

Project Lombok:

Table student:




Để thể hiện Composite Primary Key của table student, đầu tiên chúng ta cũng tạo một class chứa thông tin của 2 cột primary key. Điểm khác biệt so với khi sử dụng annotation @Embeddable là chúng ta không cần sử dụng bất cứ annotation nào trong class này cả. Nội dung của class này như sau:

Các bạn lưu ý là đối tượng này cũng phải được implement interface Serializable và các phương thức equals() và hashCode() phải được khai báo nhé!

Tiếp theo là chúng ta sẽ khai báo entity Student sử dụng annotation @IdClass với đối tượng StudentId như sau:

Như các bạn thấy, chúng ta sẽ khai báo annotation @IdClass với value là tên class chứa định nghĩa Composite Primary Key. Và một lưu ý nữa là trong khai báo entity Student, chúng ta phải khai báo thêm các cột Primary Key với annotation @Id các bạn nhé!

Vậy là xong rồi đó các bạn! Giờ mình sẽ làm một ví dụ để xem nó hoạt động như thế nào nhé.

Mình sẽ thêm tập tin cấu hình cho JPA, persistence.xml, nằm trong thư mục /src/main/resources/META-INF với nội dung như sau:

Tiếp theo, mình tạo mới một class ví dụ. Trong class này, mình sẽ sử dụng đối tượng EntityManager để tìm kiếm trong table student, những record có những cột primary key bằng những giá trị nào đó. Id lúc này sẽ là đối tượng StudentId.

Cụ thể như sau:

Nếu như trong database, mình đang có dữ liệu như sau:

Composite Primary Key trong JPA với annotation @IdClass

thì khi chạy, kết quả sẽ như sau:

Composite Primary Key trong JPA với annotation @IdClass

 

Add Comment