Tìm hiểu về @Entity và @Table annotation trong JPA

Trong bài viết Cơ bản về HibernateCơ bản về JPA, mình đã gọi những class ánh xạ các bảng clazzstudents trong database là những Java object. Nhưng thực chất, mình phải gọi chúng là những entity mới đúng bởi vì chúng đại diện cho các bảng trong database và mỗi object của chúng là một dòng trong những bảng đó.

Những class này sử dụng annotation @Entity@Table. Để các bạn hiểu thêm, mình xin nói rõ hơn về 2 annotation đó trong bài viết này.

Annotation @Entity

Để nói về @Entity annotation, đầu tiên các bạn nên biết về POJO (Plain Old Java Object) và JavaBean.

POJO là những Java object mà chúng không bị hạn chế bởi bất cứ thứ gì khác. Chúng không hiện thực hay được mở rộng từ bất kỳ một class nào khác và chúng cũng không chứa bất kỳ annotation nào trong bản thân chúng. Chúng chỉ chứa các thuộc tính, các phương thức Setter, Getter của những thuộc tính đó và có thể có thêm cả các phương thức override toString()equals().

Ví dụ:

Còn JavaBean thì sao, thật ra chúng là những POJO có ít nhất một constructor không có tham số và chúng chỉ có thể hiện thực thêm interface Serializable mà thôi.

OK, những gì mình vừa đề cập cũng đủ để nói về @Entity annotation rồi.

Thật ra, công dụng chính của @Entity annotation là biến một JavaBean trở thành một entity để chúng ta có thể thao tác với database sử dụng entity này. Đó là tất cả, nếu các bạn không sử dụng @Entity annotation thì khi chạy chương trình bạn sẽ gặp lỗi ngay.

Nếu các bạn không sử dụng @Table annotation trong entity của mình, thì mặc định tên bảng trong database sẽ là tên lớp của entity.

Trong trường hợp này, tên bảng trong database tương ứng sẽ là clazz.

Ngoài ra chúng ta còn có thể điều chỉnh lại tên bảng bằng cách khai báo thêm thuộc tính name trong @Entity annotation. Trong trường hợp này, tên của entity cũng sẽ thay đổi theo.

Ở đây, tên bảng sẽ là class và tên của entity này cũng sẽ thay đổi là Class.

Annotation @Table

Trong trường hợp, các bạn chỉ muốn thay đổi tên bảng của database sẽ sử dụng trong ứng dụng của mình mà không thay đổi tên của entity, sử dụng @Table annotation sẽ đáp ứng nhu cầu đó của bạn.

Ở đây, tên bảng mà chúng ta sẽ sử dụng là class còn tên entity vẫn là Clazz.


4.2/5 - (5 bình chọn)

Add Comment