java - ما الفرق بين JPA و Hibernate؟



java-ee orm (16)

أحاول أن أشرح بكلمات سهلة للغاية.

لنفترض أنك بحاجة إلى سيارة كما نعلم جميعًا أن لديها العديد من الشركات المصنّعة للفئات مثل مرسيدس ، بي أم دبليو ، أودي ، إلخ.

الآن في البيان أعلاه CAR (هي مواصفات) لأن كل سيارة لديها ميزات مشتركة مثل الشيء مع 4 عجلات ويمكن أن تكون مدفوعة على الطريق سيارة ... لذلك مثل JPA. و MERCEDES و BMW و AUDI وغيرها تستخدم فقط ميزة سيارة مشتركة وإضافة وظائف وفقا لقاعدة عملائها بحيث يتم تنفيذ مواصفات السيارة مثل السبات ، iBATIS إلخ.

لذلك من خلال هذه الميزات المشتركة يذهب إلى jpa والإسبات هو مجرد تنفيذ وفقا لحاجة jboss الخاصة بهم.

1 شيء آخر

تتضمن JPA بعض الخصائص الأساسية في المستقبل إذا كنت ترغب في تغيير وضع السبات إلى أي تطبيق آخر يمكنك التبديل بسهولة دون الكثير من الصداع ولهذه الخصائص الأساسية تتضمن تعليقات JPA التي يمكن أن تعمل لأي تقنية تطبيق ، استعلامات JPQL.

لذلك نحن ننفذ بشكل أساسي السبات بتقنية JPA النوعية فقط في حالة ما إذا كنا نريد تبديل تطبيقنا وفقًا لاحتياجات العميل بالإضافة إلى أنك ستكتب رمزًا أقل نظرًا لأن بعض الميزات الشائعة تشارك في JPA. إذا كان شخص ما لا يزال غير واضح ، فيمكنك التعليق كـ im جديد على تجاوز سعة التكديس.

شكرا لكم

https://code.i-harness.com

أفهم أن JPA 2 هي مواصفة و Hibernate هي أداة لـ ORM. أيضا ، أنا أفهم أن السبات لديه ميزات أكثر من JPA 2. ولكن من الناحية العملية ، ما هو الفرق حقا؟

لدي خبرة في استخدام iBatis والآن أحاول معرفة إما Hibernate أو JPA2. التقطت كتاب Pro JPA2 ويظل يشير إلى "مزود JPA". فمثلا:

إذا كنت تعتقد أن إحدى الميزات يجب أن تكون موحدة ، يجب أن تتحدث وتطلبها من مزود JPA الخاص بك

هذا يربكني لذلك لدي بعض الأسئلة:

  • باستخدام JPA2 بمفرده ، يمكنني إحضار البيانات من DB ببساطة عن طريق شرح نقاط البيع الخاصة بي
  • هل من المفترض استخدام JPA2 مع "موفر JPA" على سبيل المثال TopLink أو Hibernate؟ إذا كان الأمر كذلك ، فما الفائدة من استخدام JPA2 + Hibernate مقارنة بـ JPA2 بمفرده ، أو مقارنة بإسبات Heapnate وحده؟
  • هل يمكن أن ننصح كتاب JPA2 عملي جيد؟ يبدو "المؤيد JPA2" أشبه بالكتاب المقدس والمرجع في JPA2 (لا يدخل في "استعلامات" حتى النصف الأخير من الكتاب). هل هناك كتاب يأخذ منهج مشكلة / حل إلى JPA2؟

JPA أو Java Persistence API هي مواصفات قياسية لتطبيقات ORM بينما السبات هو تطبيق ORM الفعلي أو إطار العمل.


JPA هو JSR ie متطلبات مواصفات Java لتطبيق مخطط كائن علمي والذي لا يحتوي على كود محدد لتطبيقه. إنه يحدد مجموعة معينة من القواعد من أجل الوصول إلى البيانات واستمرارها وإدارتها بين كائنات جافا وقاعدة البيانات ذات الصلة مع تقديمها ، تم استبدال EJB حيث تم انتقادها لكونها ذات وزن ثقيل من قبل مجتمع مطوري جافا. السبات هو واحد من الطريقة التي يمكن تنفيذها JPA باستخدام المبادئ التوجيهية الشركة المصرية للاتصالات. Hibernate هي خدمة استمارية واستعلامات عالية الأداء / ذات علاقة والتي تم ترخيصها بموجب ترخيص GNU Lesser General Public License (LGPL) مفتوح المصدر. يمكن أن تبطل تنفيذ JP من JPA لتنفيذ آخر لمواصفات JPA. عند استخدام السبات المباشر ، فإنك تقوم بالتأمين في التنفيذ نظرًا لأن البعض الآخر قد يستخدم طرقًا / تهيئات مختلفة وشروحًا ، لذلك لا يمكنك التبديل إلى ORM آخر.


JPA هو Java Persistence API. الذي يحدد فقط مواصفات واجهات برمجة التطبيقات. يعني أن مجموعة القواعد والإرشادات لإنشاء واجهات برمجة التطبيقات. إذا كان يقول سياقًا آخر ، فهو عبارة عن مجموعة من المعايير التي توفر المجمّع لإنشاء واجهات برمجة التطبيقات هذه ، يمكن استخدامها للوصول إلى كائن الكيان من قاعدة البيانات. يتم توفير JPA بواسطة oracle.عندما سنقوم بالوصول إلى قاعدة البيانات ، نحن بالتأكيد بحاجة إلى تنفيذها. وسائل JPA تحدد فقط إرشادات لتنفيذ واجهات برمجة التطبيقات. Hibernate هو موفر / مورّد JPA مسؤول عن تنفيذ واجهات برمجة التطبيقات. مثل Hibernate TopLink و Open JPA هي بعض الأمثلة على موفري API لـ JPA. لذلك نحن نستخدم APIs القياسية المحددة JPA من خلال السبات.


JPA هي الرقص ، السبات هو الراقص.


JPA هي الواجهة ، ويعد Hibernate تطبيقًا واحدًا لتلك الواجهة.


JPA هي مجرد مواصفات تحتاج إلى تنفيذ ملموس. توفير أوراكل التنفيذ الافتراضي هو "Eclipselink" الآن. (يتم التبرع Toplink بواسطة Oracle لمؤسسة Eclipse للدمج مع eclipselink)

(المرجع: http://www.oracle.com/technetwork/middleware/toplink/index-085257.html http://www.eclipse.org/org/press-release/20080317_Eclipselink.php )

باستخدام Eclipselink ، يمكن للمرء التأكد من أن الشفرة محمولة لأي تنفيذ إذا دعت الحاجة إلى ذلك. الإسبات هو أيضًا تنفيذ JPA كامل + MORE (نوع من JPA Plus). السبات هو مجموعة سوبر من JPA مع بعض وظائف محددة إضافية السبات. لذلك قد لا يكون التطبيق مطورًا في Hibernate متوافقًا عند التبديل إلى تطبيقات أخرى. ما زال السبات هو اختيار غالبية المطورين كتنفيذ JPA واستخدامها على نطاق واسع.

تنفيذ JPA آخر هو OpenJPA (openjpa.apache.org) وهو امتداد لتنفيذ Kodo.


JPA هي مجرد مواصفات في حين أن Hibernate هي واحدة من مزود JPA أي أن السبات يقوم بتنفيذ العديد من الأشياء المذكورة في عقد JPA.


JPA هي مواصفات تقوم بتنفيذها في طبقة البيانات الخاصة بك لتنفيذ عمليات db ، والتعيينات OR والمهام الأخرى المطلوبة.

نظرًا لأنها مجرد مواصفات ، فأنت بحاجة إلى أداة لتنفيذها. يمكن أن تكون هذه الأداة إما Hibernate و TopLink و iBatis وبيانات الربيع وما إلى ذلك.

لا تحتاج بالضرورة إلى JPA إذا كنت تستخدم Hibernate في طبقة البيانات الخاصة بك. ولكن إذا كنت تستخدم مواصفات JPA للإسبات ، فستقوم بالتحول إلى أدوات ORM أخرى مثل iBatis ، TopLink سهلة في المستقبل ، لأن المواصفات شائعة للآخرين أيضًا.

* ( إذا كنت تتذكر ، فإنك تقوم import javax.persistence.*; عند استخدام التعليقات التوضيحية لـ OR تعيين (مثلId وColumn وGeneratedValue الخ) في Hibernate ، حيث تستخدم JPA تحت Hibernate ، يمكنك استخدام JPA'sQuery والميزات الأخرى كذلك )



السبات هو مزود JPA.

الصفحة JPA Vs Hibernate بقلم كريشنا سرينيفاسان تقول:

JPA هي مواصفة للوصول إلى البيانات واستمرارها وإدارتها بين كائنات Java وقاعدة البيانات العلائقية. كما يقول التعريف API لها ، فهي فقط المواصفات. لا يوجد تطبيق لـ API. تحدد JPA مجموعة القواعد والإرشادات لتطوير الواجهات التي تلي المعايير. مباشرة إلى النقطة: JPA هي مجرد إرشادات لتنفيذ مخطط كائن علمي (ORM) ولا يوجد رمز أساسي للتنفيذ. حيث إن ، السبات هو التنفيذ الفعلي لإرشادات JPA. عندما يقوم السبات بتنفيذ مواصفات JPA ، فسيتم اعتماد ذلك من قبل مجموعة JPA عند اتباع جميع المعايير المذكورة في المواصفات. على سبيل المثال ، ستوفر إرشادات JPA معلومات حول الميزات الإلزامية والاختيارية ليتم تنفيذها كجزء من تنفيذ JPA.


بعض الأشياء يصعب فهمها دون منظور تاريخي للغة وفهم JCP.

في كثير من الأحيان ، هناك أطراف ثالثة تقوم بتطوير حزم تؤدي وظيفة أو تملأ فجوة ليست جزءًا من JDK الرسمي. لأسباب مختلفة ، قد تصبح هذه الوظيفة جزءًا من جافا JDK من خلال JCP (عملية مجتمع جافا)

قدم Hibernate (في 2003) طريقة لتجريد SQL والسماح للمطورين بالتفكير أكثر من حيث الأشياء الثابتة (ORM). تقوم بإعلام السبات عن كائنات الكيان الخاص بك ويقوم تلقائياً بإنشاء الاستراتيجية لاستمرارها. قدم Hibernate تنفيذًا لتنفيذ ذلك وواجهة برمجة التطبيقات لتنفيذ التنفيذ إما عبر تهيئة XML أو التعليقات التوضيحية.

تكمن المشكلة الأساسية الآن في أن الشفرة الخاصة بك تترابط بإحكام مع بائع معين (إسبات) لما اعتقده الكثير من الناس أنه يجب أن يكون أكثر عمومية. ومن هنا الحاجة إلى وجود API استمرارية عام.

في الوقت نفسه ، كان JCP مع الكثير من المدخلات من Hibernate وغيرها من موردي أدوات ORM يقوم بتطوير JSR 220 (طلب مواصفات Java) الذي نتج عنه JPA 1.0 (2006) وفي النهاية JSR 317 وهو JPA 2.0 (2009). هذه هي مواصفات واجهة برمجة تطبيقات Java Persistence العامة. يتم توفير واجهة برمجة التطبيقات (API) في JDK كمجموعة من الواجهات بحيث تعتمد الطبقات الخاصة بك على javax.persistence ولا تقلق بشأن البائع المحدد الذي يقوم بعمل استمرارية الكائنات الخاصة بك. هذه ليست سوى واجهة برمجة التطبيقات وليست التطبيق. أصبح Hibernate الآن واحدًا من العديد من الموردين الذين يقومون بتطبيق مواصفات JPA 2.0. يمكنك التوليف نحو JPA واختيار أي بائع متوافق مع ORM يناسب احتياجاتك.

هناك حالات قد يقدم فيها Hibernate ميزات غير مقننة في JPA. في هذه الحالة ، يمكنك اختيار إدراج تعليق توضيحي محدد في Hibernate مباشرة في صفك لأن JPA لا يوفر الواجهة للقيام بذلك الشيء.

المصدر: http://www.reddit.com/r/java/comments/16ovek/understanding_when_to_use_jpa_vs_hibernate/


في حين أن JPA هي المواصفات ، فإن Hibernate هو موفر التطبيق الذي يتبع القواعد الموضحة في المواصفات.


كما تنص على JPA هو مجرد مواصفات ، وهذا يعني عدم وجود التنفيذ. يمكنك وضع تعليقات توضيحية على الفصول الدراسية بقدر ما تريد مع التعليقات التوضيحية لـ JPA ، ولكن بدون تنفيذ لن يحدث أي شيء. فكر في JPA كالتوجيهات التي يجب اتباعها أو واجهة ، في حين أن JPA في Hibernate هو تعليمة برمجية تتوافق مع API كما هو محدد بمواصفات JPA وتوفر وظيفة تحت غطاء المحرك.

عند استخدام Hibernate مع JPA ، فأنت تستخدم بالفعل تطبيق Hibernate JPA. الاستفادة من هذا هو أنه يمكنك مبادلة تطبيق Hibernate لـ JPA لتطبيق آخر لمواصفات JPA. عند استخدام السبات المباشر ، فإنك تقوم بالتأمين في التنفيذ نظرًا لأن البعض الآخر من ORM قد يستخدم أساليب / تهيئات مختلفة للتعليقات ، لذلك لا يمكنك التبديل إلى ORM آخر.

للحصول على وصف أكثر تفصيلاً ، اقرأ إدخالي في المدونة .


JPA هي الواجهة بينما يتم تنفيذ Hibernate.

تقليديا هناك العديد من حلول Java ORM:

كل تطبيق يحدد تعريف التعيين الخاص به أو API العميل. جمعت مجموعة خبراء JPA أفضل ما في هذه الأدوات ، ولذلك قاموا بإنشاء واجهة برمجة تطبيقات Java Persistence API.

واجهة برمجة التطبيقات القياسية المثالية مريحة للغاية من وجهة نظر العميل ، مما يجعل من السهل نسبياً تبديل تطبيق واحد مع الآخر (على الرغم من أنه ليس عمليًا بهذه البساطة لأنه في المشروعات الكبيرة سيتعين عليك استخدام ميزات معيارية غير قياسية على أي حال) .

دفعت JPA القياسية منافسة Java ORM إلى مستوى جديد وهذا لا يمكن إلا أن يؤدي إلى تطبيقات أفضل.

كما هو موضح في كتابي ، "استمرارية جافا عالية الأداء" ، يقدم Hibernate ميزات لا تدعمها JPA :

تسمح هذه الميزات الإضافية لـ Hibernate بمعالجة العديد من متطلبات الثبات التي تتطلبها تطبيقات المؤسسات الكبيرة.


JPA: تمامًا مثل الواجهة وليس لها أي تنفيذ ملموس لها لاستخدام الوظائف الموجودة في JPA.

السبات: هو مجرد موفر JPA الذي يقوم بتنفيذ الوظائف في JPA ويمكن أن يكون له بعض الوظائف الإضافية التي قد لا تكون موجودة في JPA.

نصيحة: يمكنك استخدامها

     *combo 1* : JPA + JPA Provider(Hibernate) 
     *combo 2* : only Hiberante which does not need any interface 

كومبو 1 : يستخدم عندما تشعر أن السبات الخاص بك لا يعطي أداء أفضل ويرغب في تغيير مزود JPA ذلك الوقت ليس من الضروري أن تكتب JPA مرة أخرى. يمكنك كتابة موفر آخر لـ JPA ... ويمكنه تغيير عدد المرات التي يمكنك استخدامها.

كومبو 2 : يستخدم أقل من ذلك بكثير عندما لا تغير مزوّد JPA الخاص بك بأي ثمن.

تفضل بزيارة http://blog-tothought.rhcloud.com//post/2 ، حيث سيتضح لك الارتباك الكامل.





orm