JPA در مقابل Hibernate
تقریباً همه برنامه های کاربردی سازمانی برای دسترسی منظم به پایگاه های داده رابطه ای مورد نیاز هستند. اما مشکلی که در فناوری های قبلی (مانند JDBC) با آن مواجه بود، عدم تطابق امپدانس (تفاوت بین فناوری های شی گرا و رابطه ای) بود. راه حلی برای این مشکل از طریق معرفی یک لایه انتزاعی به نام لایه Persistence معرفی شد که دسترسی به پایگاه داده از منطق تجاری را محصور می کند. JPA (Java Persistence API) یک چارچوب اختصاص داده شده برای مدیریت داده های رابطه ای (با استفاده از لایه پایداری) در برنامه های جاوا است. پیاده سازی های فروشنده بسیاری از JPA در جامعه توسعه دهندگان جاوا استفاده می شود. Hibernate محبوب ترین چنین پیاده سازی JPA است (DataNucleus، EclipseLink و OpenJPA برخی دیگر هستند). جدیدترین نسخه JPA (JPA 2.0) به طور کامل توسط Hibernate 3.5 پشتیبانی می شود که در مارس 2010 منتشر شد.
JPA چیست؟
JPA چارچوبی برای مدیریت داده های رابطه ای برای جاوا است. می توان آن را با برنامه هایی که از JSE (پلتفرم جاوا، نسخه استاندارد) یا JEE (پلتفرم جاوا، نسخه سازمانی) استفاده می کنند استفاده کرد. نسخه فعلی آن JPA 2.0 است که در 10 دسامبر 2009 منتشر شد. JPA جایگزین EJB 2.0 و EJB 1.1 entity beans شد (که به دلیل سنگین بودن توسط جامعه توسعه دهندگان جاوا به شدت مورد انتقاد قرار گرفتند). اگرچه entity beans (در EJB) اشیاء پایداری را ارائه می کرد، بسیاری از توسعه دهندگان به استفاده از اشیاء نسبتاً سبک وزن ارائه شده توسط DAO (اشیاء دسترسی به داده) و سایر چارچوب های مشابه استفاده می کردند. در نتیجه، JPA معرفی شد و بسیاری از ویژگیهای منظم چارچوبهای ذکر شده در بالا را در خود جای داد.
Persistence همانطور که در JPA توضیح داده شده است، API را پوشش می دهد (تعریف شده در javax.پایداری)، JPQL (پلتفرم جاوا، نسخه Enterprise) و ابرداده مورد نیاز برای اشیاء رابطه ای. حالت یک موجودیت پایدار معمولاً در یک جدول ثابت می شود. نمونه های یک موجودیت با ردیف های جدول پایگاه داده رابطه ای مطابقت دارد. ابرداده برای بیان روابط بین موجودیت ها استفاده می شود. حاشیه نویسی یا فایل های توصیفگر XML جداگانه (که با برنامه مستقر شده اند) برای تعیین ابرداده در کلاس های موجودیت استفاده می شود. JPQL، که مشابه پرس و جوهای SQL است، برای پرس و جو از موجودیت های ذخیره شده استفاده می شود.
Hibernate چیست؟
Hibernate چارچوبی است که می تواند برای نگاشت شی رابطه ای در نظر گرفته شده برای زبان برنامه نویسی جاوا استفاده شود. به طور خاص، این یک کتابخانه ORM (نگاشت شی - رابطه ای) است که می تواند برای نگاشت مدل شی-رابطه ای به مدل رابطه ای معمولی استفاده شود. به عبارت ساده، یک نقشه برداری بین کلاس های جاوا و جداول در پایگاه داده های رابطه ای، همچنین بین انواع داده های جاوا به SQL ایجاد می کند. Hibernate همچنین می تواند برای پرس و جو و بازیابی داده ها با ایجاد تماس های SQL استفاده شود.بنابراین، برنامه نویس از مدیریت دستی مجموعه نتایج و تبدیل اشیا راحت می شود. Hibernate به عنوان یک چارچوب رایگان و منبع باز منتشر شده است که تحت مجوز گنو توزیع شده است. یک پیاده سازی برای JPA API در Hibernate 3.2 و نسخه های بعدی ارائه شده است. گاوین کینگ بنیانگذار Hibernate است.
تفاوت JPA و Hibernate چیست؟
JPA چارچوبی برای مدیریت داده های رابطه ای در برنامه های جاوا است، در حالی که Hibernate یک پیاده سازی خاص از JPA است (بنابراین در حالت ایده آل، JPA و Hibernate نمی توانند مستقیماً با هم مقایسه شوند). به عبارت دیگر Hibernate یکی از محبوب ترین فریم ورک هایی است که JPA را پیاده سازی می کند. Hibernate JPA را از طریق کتابخانه های Hibernate Annotation و EntityManager که در بالای کتابخانه های Hibernate Core پیاده سازی شده اند، پیاده سازی می کند. هر دو EntityManager و Annotations از چرخه حیات Hibernate پیروی می کنند. جدیدترین نسخه JPA (JPA 2.0) به طور کامل توسط Hibernate 3.5 پشتیبانی می شود. JPA دارای یک رابط استاندارد است، بنابراین جامعه توسعه دهندگان بیشتر از Hibernate با آن آشنا هستند.از سوی دیگر، API های بومی Hibernate را می توان قدرتمندتر در نظر گرفت زیرا ویژگی های آن ابر مجموعه ای از JPA است.