Entity Annotations in JPA | انوتیشن های Entity در JPA
توضیحات جلسه
جزوه و مستندات
مفاهیم کلیدی
- 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 زمان دقیق را هم ذخیره کند.
