جلسه شماره 99رایگان

Entity Annotations in JPA | انوتیشن های Entity در JPA

00:48:29

توضیحات جلسه

🎥 این ویدیو قسمت نود و دوم از بوت‌کمپ رایگان جاواست. 📚 Java ORM (JPA/Hibernate) – آموزش Annotation های سطح Entity در این جلسه (ویدیو چهارم پلی‌لیست ORM) می‌ریم سراغ یکی از مهم‌ترین بخش‌های کار با JPA/Hibernate: ✨ Annotation هایی که روی Entity ها استفاده می‌شن و نقش اصلی توی نگاشت کلاس‌ها به جدول‌های دیتابیس دارن. اگر می‌خوای ORM رو درست و اصولی یاد بگیری، این ویدیو دقیقاً همون جاییه که باید ببینی 💪🔥 در این ویدیو بررسی می‌کنیم: ✅ @Entity و اینکه چطور یک کلاس رو تبدیل به Entity کنیم ✅ @Id و تعریف کلید اصلی (Primary Key) ✅ اجرای پروژه و تست مرحله‌به‌مرحله برای اطمینان از درست بودن تنظیمات ✅ property مهم و کاربردی: hibernate.hbm2ddl.auto ✅ @Table برای تنظیم نام جدول و ویژگی‌های آن ✅ @Column برای کنترل دقیق ستون‌ها (نام، nullable، length و...) ✅ @Transient برای فیلدهایی که نباید وارد دیتابیس بشن ✅ @Temporal برای مدیریت تاریخ‌ها در دیتابیس ✅ @Enumerated برای ذخیره enum ها به شکل صحیح 📌 در پایان هم یک مرور کامل داریم تا همه نکات توی ذهنت تثبیت بشه ✅ لینک پروژه داخل گیت هاب: https://github.com/farzadafi/ProgrammingByFarzadAfi/tree/master/06_orm 💬 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi هر سوالی داشتی، می‌تونی توی گروه بپرسی؛ من یا مربی‌های گروه کمکت می‌کنیم 💬🤝 🎯 بوت‌کمپ رایگان جاوا – آموزش پروژه‌محور برای یادگیری عمیق و ورود به بازار کار 🚀

جزوه و مستندات

مفاهیم کلیدی

  • POJO Plain Old Java Object

یک کلاس ساده در جاوا است که هیچ وابستگی‌ای به فریم‌ورک‌های خاص ندارد و معمولاً فقط شامل فیلدهای private به‌همراه متدهای getter و setter است.

  • Entity

کلاسی است که نمایانگر یک موجودیت یا جدول در پایگاه داده است. هر شیء ساخته‌شده از این کلاس، معادل یک ردیف یا row در جدول مربوطه است.

  • JPA Java Persistence API

یک استاندارد و قرارداد در جاوا برای مدیریت داده‌های رابطه‌ای است که تعیین می‌کند کلاس‌های جاوا چگونه به جدول‌های دیتابیس نگاشت شوند.

  • Primary Key

شناسه منحصربه‌فرد برای هر ردیف در جدول دیتابیس است که در JPA برای هر Entity اجباری است.

  • Persistence Unit

یک پیکربندی در فایل persistence.xml است که تنظیمات مربوط به اتصال دیتابیس و مدیریت Entityها را تحت یک نام مشخص گروه‌بندی می‌کند.

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

  • پیش‌نیازهای اصلی برای تبدیل یک کلاس به Entity در JPA چیست؟

کلاس باید حتماً دارای انوتیشن @Entity باشد، یک سازنده بدون آرگومان یا no-args constructor داشته باشد و یک کلید اصلی با انوتیشن @Id برای آن تعریف شده باشد.

  • تفاوت JPA و Hibernate در چیست؟

JPA صرفاً یک مشخصات فنی یا Specification و مجموعه‌ای از قوانین است. اما Hibernate یکی از پیاده‌سازی‌ها یا Implementation/Providerهای معروف این استاندارد است که عملیات واقعی را انجام می‌دهد.

  • کاربرد انوتیشن @Transient چیست؟

این انوتیشن زمانی استفاده می‌شود که بخواهیم یک فیلد در کلاس وجود داشته باشد، اما در دیتابیس ذخیره نشود؛ برای مثال، فیلدی که مقدار آن از محاسبات سایر فیلدها به دست می‌آید.

  • تفاوت بین EnumType.ORDINAL و EnumType.STRING در انوتیشن @Enumerated چیست؟

در حالت ORDINAL، عدد یا اندیس مقدار enum در دیتابیس ذخیره می‌شود. این روش با تغییر ترتیب مقدارهای enum دچار مشکل می‌شود.

اما در حالت STRING، نام متنی مقدار enum ذخیره می‌شود که خوانایی و پایداری بیشتری دارد.

  • ویژگی hibernate.hbm2ddl.auto با مقدار update چه کاری انجام می‌دهد؟

این ویژگی باعث می‌شود Hibernate هنگام اجرا، ساختار دیتابیس را با کلاس‌های Entity مقایسه کند و در صورت نیاز، جدول‌ها یا ستون‌های جدید را به‌صورت خودکار اضافه کند؛ بدون اینکه داده‌های قبلی پاک شوند.

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

در این آموزش، فرآیند نگاشت یک کلاس Student به پایگاه داده پیاده‌سازی شده است. مراحل گام‌به‌گام به شرح زیر است:

۱. تعریف مدل

ابتدا یک کلاس جاوا با فیلدهایی مانند id، name و birthDate ایجاد می‌شود.

۲. هویت‌بخشی به موجودیت

با استفاده از @Entity، کلاس به‌عنوان یک جدول معرفی می‌شود. همچنین با @Id، فیلد شناسه به‌عنوان کلید اصلی مشخص می‌شود.

۳. پیکربندی اتصال

در فایل persistence.xml، نام واحد پایداری یا persistence-unit و اطلاعات دیتابیس، مانند URL و پسورد، تنظیم می‌شود.

۴. مدیریت خودکار جدول

با تنظیم hbm2ddl.auto روی update یا create، به Hibernate اجازه داده می‌شود که به‌محض اجرای برنامه، جدول متناظر را در دیتابیس بسازد یا به‌روزرسانی کند.

۵. سفارشی‌سازی نگاشت

با استفاده از انوتیشن‌هایی مانند @Table برای تغییر نام جدول و @Column برای تنظیم طول یا منحصربه‌فرد بودن ستون‌ها، کنترل دقیق‌تری روی دیتابیس اعمال می‌شود.

بیشتر بدانید

  • IDE Tip

در نسخه IntelliJ IDEA Ultimate، تب مخصوصی به نام Database وجود دارد که امکان مدیریت کامل دیتابیس و مشاهده جدول‌ها را بدون خروج از محیط کدنویسی فراهم می‌کند.

  • نکته دیباگ

برای مشاهده دستورات SQL که Hibernate به سمت دیتابیس می‌فرستد، می‌توانید پراپرتی hibernate.show_sql را در تنظیمات برابر با true قرار دهید.

  • Dependency Tip

اگر از کتابخانه hibernate-core استفاده کنید، نیازی به اضافه کردن جداگانه jakarta.persistence-api نیست؛ زیرا خود Hibernate آن را به‌عنوان وابستگی داخلی شامل می‌شود.

  • تنظیمات زمانی

با استفاده از انوتیشن @Temporal(TemporalType.DATE) می‌توانید مشخص کنید که فیلد تاریخ فقط شامل تاریخ باشد، یا با TIMESTAMP زمان دقیق را هم ذخیره کند.