2014-10-28 13 views
9

Khi tôi đang làm chương trình độc lập Hibernate mẫu, chút nhầm lẫn được tạo ra trong tâm trí của tôi với việc sử dụng chú thích @Entity là gì. Ở đây câu hỏi của tôi là, tôi có một lớp liên tục với @Entity từ gói javax.persistence thì nó hoạt động tốt nhưng khi tôi thay thế chú thích @Entity bằng Hibernate API (tức là từ gói org.hibernate.annotations) thì nó cho org.hibernate.MappingException: Thực thể không xác định: com.jetti.test.EmployeeSự khác biệt giữa @Entity trong Hibernate và JPA

Đưa ra một số giải thích thêm được đánh giá cao.

+2

Bài đăng SO này giải thích sự khác biệt giữa hai chú thích và lý do tại sao ánh xạ của bạn không được tìm thấy: http://stackoverflow.com/questions/955515/difference-between-jpa-entity-and-hibernate-entity –

+0

và Hibernate Entity không được chấp nhận nên bạn không nên sử dụng nó FWIW; xem javadocs thay vì chỉ sử dụng –

Trả lời

5

@ javax.persistence.Entity vẫn là bắt buộc, @ org.hibernate.annotations.Entity không thay thế.

Documentation

Vì vậy, ngủ đông của @Entity chỉ bổ sung cho javax.persistence.Entity, và cho biết thêm một vài tùy chọn tinh chỉnh.

+0

Tôi nghĩ Hibernate sử dụng JPA bên dưới? – ha9u63ar

+2

@hagubear JPA là một đặc điểm kỹ thuật, và Hibernate (như một số khung công tác khác) thực hiện đặc tả đó. Để báo [this] (http://en.wikibooks.org/wiki/Java_Persistence/What_is_JPA%3F) 'JPA chính nó chỉ là một đặc tả, không phải là một sản phẩm; nó không thể thực hiện sự kiên trì hay bất cứ điều gì khác. JPA chỉ là một tập hợp các giao diện và yêu cầu thực hiện.'. Trong bối cảnh của câu hỏi này, nó có nghĩa là Hibernate thực hiện hỗ trợ cho 'javax.persistence.Entity', nhưng thêm nhiều khả năng hơn với' org.hibernate.annotations.Entity'. –

4

Sự khác biệt là giống nhau giữa Hibernate và JPA, thay vì JPA chỉ là một đặc điểm kỹ thuật, có nghĩa là không có triển khai thực hiện và Hibernate là một triển khai thực hiện.

Bạn có thể chú thích lớp học của mình bằng chú thích JPA, nhưng không có triển khai thì sẽ không có gì xảy ra.

Theo cách trừu tượng, bạn có thể xem xét "JPA" làm nguyên tắc.

Khi bạn sử dụng Hibernate với JPA, bạn đang thực sự sử dụng Hibernate bằng cách thực hiện JPA. Lợi ích là bạn có thể hoán đổi cài đặt JPA của Hibernate để thực hiện một đặc tả JPA khác (Eclipse Link, DataNucleuse, ..) nếu bạn sử dụng Hibernate trực tiếp, bạn không thể chuyển sang ORM khác.

Tôi hy vọng nó hữu ích.


JPA không phải là triển khai ORM mà chỉ là hướng dẫn triển khai Ánh xạ quan hệ đối tượng (ORM) và không có mã cơ bản để triển khai. nó sẽ không cung cấp bất kỳ chức năng cụ thể nào cho ứng dụng của bạn. Mục đích của nó là cung cấp một bộ quy tắc và hướng dẫn có thể được theo sau bởi các nhà cung cấp triển khai JPA để tạo ra một triển khai ORM theo cách được chuẩn hóa.

Hibernate là nhà cung cấp JPA. Khi có những thay đổi mới đối với đặc điểm kỹ thuật, hibernate sẽ phát hành việc thực hiện cập nhật của nó cho đặc tả JPA. Các nhà cung cấp JPA phổ biến khác là Eclipse Link (Thực hiện tham chiếu), OpenJPA, v.v.See Other provider here

@javax.persistence.Entity là một kim chỉ nam cho một nhà cung cấp mà thực hiện JPA châm

@org.hibernate.annotations.Entity là một thực hiện cho một Hibernate ORM

Hơn nữa bạn có thể see this other topic

+0

Không nhận được rõ ràng về câu trả lời của bạn, Bạn có thể vui lòng giải thích về điều này - @Xstian – jettisamba

Các vấn đề liên quan