Farzad Afi Logo

FarzadAfi

آموزش تخصصی برنامه نویسی

JPA vs Hibernate

📖توضیحات درس

🎥 این ویدیو قسمت نود از بوت‌کمپ رایگان جاوا است. 📚 JPA & Hibernate – معرفی کامل JPA و Hibernate و تفاوت‌های آنها در این جلسه به یکی از مهم‌ترین و پرکاربردترین فریم‌ورک‌های جاوا می‌پردازیم: JPA (Java Persistence API) و Hibernate. با هم یاد می‌گیریم که JPA چیه، Hibernate چطور کار می‌کنه، و تفاوت‌ها و شباهت‌های این دو فریم‌ورک رو بررسی می‌کنیم. در این ویدیو بررسی می‌کنیم: معرفی JPA و ویژگی‌های کلیدی آن مفاهیم پایه‌ای JPA و نحوه استفاده از آن معرفی Hibernate و چرا باید از Hibernate استفاده کنیم؟ ویژگی‌های اصلی Hibernate و مزایای آن تفاوت‌های اصلی بین JPA و Hibernate در پایان جلسه یک مرور کلی داریم تا نکات مهم به خوبی در ذهن شما تثبیت بشه. 💬 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi هر سوالی داشتی، می‌تونی توی گروه بپرسی؛ من یا مربی‌های گروه کمکت می‌کنیم 💬 🎯 بوت‌کمپ رایگان جاوا – آموزش پروژه‌محور برای یادگیری عمیق و ورود به بازار کار.
00:24:00🎯رایگان

📄جزوه

مفاهیم کلیدی

  • JPA (Java Persistence API) یک Java Specification (مشخصه فنی) است که استانداردهایی را برای مدیریت داده‌های رابطه‌ای در برنامه‌های جاوا تعریف می‌کند. JPA به خودی خود کد اجرایی نیست، بلکه مجموعه‌ای از قوانین است که کار با دیتابیس را ساده‌تر می‌کند.

  • Hibernate یک فریم‌ورک ORM متن‌باز و محبوب است که به عنوان یک پیاده‌سازی (Implementation) از استانداردهای JPA عمل می‌کند. هایبرنت کد واقعی است که وظیفه برقراری ارتباط با دیتابیس را بر عهده دارد.

  • ORM (Object-Relational Mapping) تکنولوژی یا مفهومی است که مانند یک پل عمل می‌کند تا کلاس‌های جاوا (Objects) را به جداول دیتابیس (Relational Tables) و بالعکس متصل و نگاشت کند.

  • Entity کلاس‌های مدل در برنامه (Domain Models) که قرار است متناظر با آن‌ها یک جدول در دیتابیس ساخته شود. این کلاس‌ها داده‌های برنامه را حمل می‌کنند.

  • Specification به معنی تعیین خصوصیات و استاندارها روی کاغذ است. مشخص می‌کند که یک ابزار ORM "چه" کارهایی باید انجام دهد و چه استانداردهایی را رعایت کند.

  • Implementation پیاده‌سازی واقعی و کدهای اجرایی است که طبق استانداردهای Specification نوشته شده‌اند تا عملیات‌های مورد نظر (مانند ذخیره در دیتابیس) را "چگونه" انجام دهند.

  • JPQL (Java Persistence Query Language) زبان کوئری‌نویسی مخصوص JPA است که به جای تمرکز بر جداول دیتابیس، بر اساس آبجکت‌ها و کلاس‌های جاوا نوشته می‌شود.

  • HQL (Hibernate Query Language) نسخه اختصاصی زبان کوئری‌نویسی در هایبرنت است که شباهت زیادی به SQL دارد اما به صورت Object-Oriented عمل می‌کند.

  • Boilerplate Code بخش‌هایی از کد که در پروژه‌های مختلف تکرار می‌شوند و ارزش تجاری خاصی ندارند (مانند کدهای باز و بسته کردن کانکشن دیتابیس در JDBC) که ابزارهایی مثل هایبرنت آن‌ها را حذف می‌کنند.

موارد مصاحبه ای

  • تفاوت اصلی بین JPA و Hibernate چیست؟ JPA یک Specification یا راهنما (Guidelines) است که استانداردها را تعریف می‌کند، اما Hibernate پیاده‌سازی واقعی (Implementation) آن استانداردهاست. شما نمی‌توانید JPA را به تنهایی اجرا کنید؛ برای کارکرد برنامه حتماً به یک پیاده‌سازی مثل Hibernate نیاز دارید.

  • چرا استفاده از Hibernate باعث افزایش Portability (قابلیت جابه‌جایی) دیتابیس می‌شود؟ در روش‌های قدیمی مثل JDBC، کوئری‌های SQL وابسته به نوع دیتابیس (مثلاً PostgreSQL یا MySQL) بودند. هایبرنت با مدیریت کوئری‌ها، این اجازه را می‌دهد که بدون تغییر در کدهای برنامه، دیتابیس پروژه را عوض کنید.

  • چالش‌های اصلی استفاده مستقیم از JDBC چیست؟ نیاز به مدیریت دستی Exceptionها، حجم بالای کدهای تکراری (Boilerplate Code)، دشواری در مدیریت روابط (Relations) بین جداول و پیچیدگی کدها با بزرگ شدن پروژه.

  • نقش Entity Manager در JPA چیست؟ یک API استاندارد است که برای مدیریت چرخه حیات انتیتی‌ها و انجام عملیات‌های CRUD (ایجاد، خواندن، بروزرسانی و حذف) استفاده می‌شود.

  • آیا می‌توان بدون استفاده از Hibernate از JPA استفاده کرد؟ بله، JPA یک استاندارد است و می‌توان از پیاده‌سازی‌های دیگر مانند EclipseLink یا OpenJPA نیز استفاده کرد، اما Hibernate محبوب‌ترین پیاده‌سازی موجود است.

سناریو کاربردی

در این آموزش، نحوه نگاشت یک کلاس جاوا به دیتابیس با مثال کلاس Student توضیح داده شد:

فرض کنید کلاسی به نام Student در جاوا دارید که دارای فیلدهای id از نوع int و firstName از نوع String است. بدون نیاز به نوشتن کوئری‌های پیچیده SQL، هایبرنت این کلاس را به جدولی به نام Student در دیتابیس متصل می‌کند. در این فرآیند:

  1. نوع داده String در جاوا به صورت خودکار به VARCHAR در دیتابیس تبدیل می‌شود.
  2. فیلد id به ستون کلید اصلی (Primary Key) متناظر می‌گردد.
  3. به جای نوشتن دستی INSERT INTO... برای ذخیره دانشجو، از متدهای آماده‌ای مثل persist یا save استفاده می‌شود که باعث تمیزتر شدن کد و کاهش خطا می‌گردد.

بیشتر بدانید

  • ترتیب ظهور تکنولوژی‌ها جالب است بدانید که هایبرنت پیش از JPA وجود داشته است. در واقع هایبرنت آنقدر موفق بود که استانداردهای JPA با الهام گرفتن از آن شکل گرفتند تا یک استاندارد واحد برای همه کتابخانه‌های ORM در جاوا ایجاد شود.

  • نکته دیباگ و اجرا اگر در پروژه خود از انوتیشن‌های JPA (مانند @Entity) استفاده کنید اما کتابخانه Hibernate Core را به وابستگی‌های (Dependencies) پروژه اضافه نکنید، برنامه شما در هنگام اجرا با خطا مواجه خواهد شد، زیرا JPA فقط "نقشه" است و برای اجرا به "موتور" هایبرنت نیاز دارد.

  • مدیریت روابط با استفاده از انوتیشن‌های ساده در هایبرنت، می‌توان روابط پیچیده دیتابیسی مانند One-to-Many یا Many-to-Many را به سادگی و بدون درگیر شدن با کدهای پیچیده SQL مدیریت کرد.