Farzad Afi Logo

FarzadAfi

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

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

📖توضیحات درس

🎥 این ویدیو قسمت نود و دوم از بوت‌کمپ رایگان جاواست. 📚 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 هر سوالی داشتی، می‌تونی توی گروه بپرسی؛ من یا مربی‌های گروه کمکت می‌کنیم 💬🤝 🎯 بوت‌کمپ رایگان جاوا – آموزش پروژه‌محور برای یادگیری عمیق و ورود به بازار کار 🚀
00:48:29🎯رایگان

📄جزوه

مفاهیم کلیدی

  • 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 عدد (اندیس) مقدار اینام در دیتابیس ذخیره می‌شود که با تغییر ترتیب اینام‌ها دچار مشکل می‌شود، اما در حالت STRING نام متنی آن ذخیره می‌گردد که خوانایی و پایداری بیشتری دارد.

  • ویژگی 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 Ultimate تب مخصوصی به نام Database وجود دارد که امکان مدیریت کامل دیتابیس و مشاهده جداول را بدون خروج از محیط کدنویسی فراهم می‌کند.

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

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

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