JPA چیزی نیست جزو مجموعه ای از API های استاندارد.
هرکدام از vendor ها اومدن این API ها روپیاده سازی کردند مانند:
Hibernate
EclipseLink
اما برای استفاده از Hibenrate توی پروژه تون شما دو روش در پیش دارید :
-
استفاده از خود تکنولوژی Hibernate که برای اینکار نیاز دارید فایل hibernate.cfg.xml رو توی پروژه تون داشته باشید و تعریفش کنید
-
استفاده از JPA و مشخص کردن نوع پیاده سازی در فایل Persistence.xml و در این فایل یک proprty وجود داره به صورت زیر درش دقیقا مشخص می کنید که از Hibernate می خوام استفاده کنم
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.2"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<!-- Define persistence unit -->
<persistence-unit name="my-persistence-unit">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
</persistence-unit>
</persistence>
این عمده ترین تفاوت در فایل persistence.xml است
اما چه فرقی داره شما مستقیما سراغ خود تکنولوژی هایبرنت بروید یا از طریق JPA از این تکنولوژی استفاده کنید
باید بگم عمر هایبرنت خیلی بیشتر از JPA است و پخته تر اونه . خیلی چیزایی در هایبرنت است و می تونید انجامش بدید که توی مجموعه API های استاندارد JPA و داکیومنت هاش نیست یا محدود تعریف شده
و بالطبع دست شما بازتره توی هایبرنت!
اما از طرف دیگه اگه از API های استاندارد JPA استفاده کنید چون این نوع API ها فقط با interface ها سروکار داره وهرجایی تو پروژه تون اونها استفاده کنیدپروژه تون رو به این interface ها ( انتزاع ) وابسته می کنید نه پیاده سازی خاص ، در نتیجه پروژه شما در مقابل تغییرات آتی مصون تره یعنی اگه فردا به هر دلیلی بخواهید بجای هایبرنت از پیاده سازی دیگه ی استفاده کنید تغییرات خیلی کمی تو ی کدهاتون نیاز هست بدید
جدای از اینکه نوع پیاده سازی انتخابی شما چی هست در یک فایل persistence.xml موارد زیر رو بایستی مشخص و پیکربندی کنید ( تقریبا تو فایل hibernate.cfg.xml هم همین ها هست ) :
-
persistence unit با این کار دارید بیان می کنید از چه دیتابیسی می خواهید استفاده کنید ، ممکنه توی یه پروژه از دوتا دیتا بیس متفاوت استفاده کنید به ازای هر کدام یک persistence unit باید تعریف کنید
در داخل هر persistence unit نیاز هست مواردی زیر دست کم مشخص کنید:
-
نام و نوع jdbc driver ی که قراره داخل پروژه تون استفاده کنید ( مثل postgresql یا mysql )
-
آدرس url اون دیتابیسی که می خواهید بهش وصل بشید و قراره براتون connection فیزیکی ایجاد کنه
-
نام کاربری جهت ورود به اون دیتابیس
-
رمز عبور جهت ورود به اون دیتابیس
-
اگه از روش annotation برای مشخص کردن کلاس های entity خود ( یعنی کلاسهایی که قصد دارید state اونارو توی دیتابیس ذخیره کنید ) استفاده کرده باشید بایستی مشخص کنید توی کدوم پکیج ها دنبال اون کلاسها بگرده
این ها مینیم ویژگی هایی هست که شما توی فایل پیکربندی خودتون باید مشخص کنید
و البته یکی از مهم ترین چیزهایی که توی این مدل پروژه ها باید مشخص کنید مدیر تراکنش شما( transaction mamanger ) است . که امروزه جدای نوع و اندازه پروژه معمولا ازJTA استفاده می کنن .