Ánh xạ nhiều thực thể JPA vào một bảng cơ sở dữ liệu với chế độ ngủ đông

Tram Ho

Overview:

Trong nhiều dự án, bạn có thể sẽ gặp phải vấn đề cần mapping nhiều entities vào 1 table duy nhất. Vậy làm thế nào để thực hiện điều này với JPA. Trong bài này mình sẽ giới thiệu cách map nhiều entity vào 1 table. Sử dụng multiple entities có thể giúp tăng tốc xử lý đọc và ghi xuống database.
Trong bài viết này mình sẽ sử dụng database là PostgreSQL

Model

Ở đây mình có 1 table Bill define như bên dưới:

Ở đây mình có thông tin của 1 bill như trên, giờ mình sẽ mapping table bill này với 2 entities BillEntity và TransactionEntity, trước hết mình define 1 entity gọi là BaseBill:

BaseBill:

BillEntity:

TransactionEntity:

BaseBill là 1 class abstract, nó sẽ chưa những attribute base dùng chung giữa BillEntity và TransactionEntity, BillEntity sẽ extend từ BaseBill trong khi đó TransactionEntity ngoài những attribute base thì còn chưa thêm thông tin ngày giao dịch(transaction_date)
.
class abstract BaseBill sử dụng anotation @MappedSuperclass để những class BillEntity và TransactionEntity có thể kế thừa các attribute của BaseBill. Để tìm hiểu thêm về @MappedSuperclass thì bạn có thể tham khảo tại đây.

OK, bây giờ chúng ta sẽ thao tác thử với database xem thế nào. Ở đây mình sẽ implement 2 function để create BillEntity và TransactionEntity:

Create BillEntity:

Result log:

create TransactionEntity

Result log:

Như vậy ta thấy ở method create TransactionEntity, transaction_date cũng đã được insert vào database.
Result of database:

Ở class abstract BaseBill ta đã define company_id là @NaturalId. Nên ta có thể fetch được data bằng NaturalId.
Define 1 method để get thông qua naturalId:

result:

Conclution

Như vậy, qua bài viết trên, mình đã giới thiệu cách map multiple entities với 1 table trong database, hy vọng bài viết này hữu ích với mọi người

https://vladmihalcea.com/map-multiple-jpa-entities-one-table-hibernate/

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo