2013-02-21 38 views
5

tôi thấy rất nhiều câu hỏi tương tựSự khác nhau giữa Hibernate và Hibernate JPA

nhưng không ai trả lời câu hỏi tiếp theo của tôi. Sự khác biệt giữa cách tiếp cận ngủ đông cổ điển bằng cách sử dụng thực hiện org.hibernate.SessionFactory và JPA javax.persistence.EntityManager là gì? Tôi nghe nói rằng việc thực hiện JPA này sử dụng org.hibernate.SessionFactory và hoạt động như trình bao bọc, có thực không?

Trả lời

10

Thật vậy.

JPA chỉ đơn giản là một API cho phép bạn tóm tắt từ lớp kiên trì được sử dụng. Hibernate cung cấp khả năng triển khai giao diện EntityManager hoạt động như một adapter - nó sử dụng các phương thức cơ bản giống như một chế độ ngủ đông SessionManager.

Ý tưởng là bạn có thể, ví dụ, chuyển đổi triển khai của bạn sang Liên kết Eclipse và không phải thay đổi bất kỳ mã nguồn nào của bạn.

+0

rất nhiều cảm ơn :) – Lies

0

Dưới đây là câu trả lời của bạn câu hỏi

diference gì giữa phương pháp ngủ đông cổ điển sử dụng
org.hibernate.SessionFactory và JPA javax.persistence.EntityManager
thực hiện?

org.hibernate.SessionFactory 

nếu bạn thay đổi ORM undeline để iBatis (cho ví dụ), bạn cần phải thay đổi mã là tốt.

javax.persistence.EntityManager 

nếu bạn thay đổi ORM chưa hoàn thành thành IBatis (ví dụ) bạn không cần thay đổi mã.

+0

tại sao tôi không thể downvote ... bạn đã đọc câu hỏi chưa? – Lies

+1

Tôi đã trả lời các câu hỏi đầu tiên của bạn. – JRR

1

Câu hỏi đầu tiên của bạn,

JPA là đặc tả Java API mô tả việc quản lý dữ liệu quan hệ trong các ứng dụng sử dụng Nền tảng Java. Hibernate là thư viện ORM (Object Relational Mapping) theo đặc tả JPA.

Bạn có thể nghĩ JPA là một bộ Quy tắc được Hibernate triển khai.

Và câu trả lời cho câu hỏi thứ hai của bạn,

Như JPA chỉ là một lớp trừu tượng bền bỉ nó đòi hỏi thực hiện. và Hibernate thực hiện giao diện EntityManager sử dụng SessionManager ngủ đông. Bằng cách này, bạn hoàn toàn tách rời khỏi cách triển khai, có nghĩa là bạn có thể chuyển sang bất kỳ Hibernate hoặc OenJPA hoặc bất kỳ chương trình nào khác bất cứ khi nào bạn muốn, không cần thay đổi mã bổ sung.

3

JPA chỉ là một đặc điểm kỹ thuật, có nghĩa là không có triển khai. Bạn có thể chú thích các lớp của bạn nhiều như bạn muốn với các chú giải JPA, tuy nhiên không cần thực hiện gì sẽ không xảy ra.Hãy suy nghĩ về JPA như các nguyên tắc phải được theo sau hoặc một giao diện, trong khi triển khai JPA của Hibernate là mã đáp ứng các API như được định nghĩa bởi đặc tả JPA và cung cấp chức năng dưới mui xe.

Khi bạn sử dụng Hibernate với JPA, bạn đang thực sự sử dụng Hibernate JPA implementation. Lợi ích của việc này 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. Khi bạn sử dụng thẳng Hibernate bạn đang khóa vào việc triển khai vì các ORM khác có thể sử dụng các phương thức/cấu hình và chú thích khác nhau, do đó bạn không thể chuyển sang một ORM khác.

+0

bạn đã giải thích nó thực sự tốt. Cảm ơn bạn! –

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