آشنایی با Annotation ها در Hibernate
از سری مقالات آموزش Java Enterprise, مبحث Annotation در Hibernate را برمیگزینیم.
در مقالات قبل, مباحث اولیه مرتبط با Hibernate بررسی شد. در این مقاله قصد داریم تا پایگاه داده ای که در مقاله RESTful API جاوا مطرح کردهایم را پیاده سازی کنیم. اگر بخواهیم به طور خلاصه به پروژه اشاره کنیم, در اینجا به چهار جدول برای نگهداری اطلاعات نیاز داریم. جدول اول مربوط به اطلاعات کاربران است و آن را Profile نام گذاری میکنیم. در این جدول اطلاعات هویتی کاربران قرار میگیرد. برای مشخص کردن هویت کاربر مربوط به هریک از مطالب, نظرات و Like ها, از شناسه کاربر که به عنوان primary key تعریف شده است استفاده میکنیم. جدول بعدی مربوط به مطالب است که در آن عنوان مطلب, متن مطلب, تاریخ انتشار, شناسه منتشر کننده و شناسه مطلب قرار دارد. شناسه مطلب در این جدول, مانند جدول کاربران, به عنوان Primary Key است. این جدول را Post نام گذاری میکنیم.
جدول نظرات, Comments نام دارد و در آن متن نظر, شناسه پست و شناسه ارسال کننده قرار دارد. جدول Like نیز به همین صورت است با این تفاوت که تنها شناسه پست و شناسه ارسال کننده را شامل میشود.
تا به اینجا ساختار پایگاه داده را در سطح داده مورد بررسی قرار دادیم. اکنون باید شیوه ذخیره سازی این اطلاعات در پایگاه داده بررسی شود. چگونگی ذخیره سازی اطلاعات و همینطور دریافت اطلاعات از پایگاه داده, بسته به این است که مدل ها را چگونه تعریف کنیم و متغیر های مدل از چه نوعی باشند. Annotation ها در Hibernate به ما کمک میکنند تا چگونگی ذخیره و بازیابی این اطلاعات را مشخص کنیم و همچنین Mapping با دقت بیشتری انجام شود. در راستای پیاده سازی این پایگاه داده, شیوه کار Annotation ها را نیز بررسی میکنیم.
Hibernate از Reflection در موقع اجرا استفاده میکند و Annotation ها را میخواند و عمل Mapping را انجام میدهد.
یک پروژه جدید ایجاد میکنیم و Maven Dependency های مربوط به Hibernate را به آن اضافه و فایل hibernate.cfg.xml را تنظیم میکنیم. شیوه افزودن Hibernate به پروژه در این مقاله بررسی شده است.
اکنون جدول Profile را ایجاد میکنیم:
public class Profile { private int id; private String name; private String password; private String imageUrl; private String description; private String username; private Gender gender; } enum Gender{ male, female, }
اولین Annotation که باید استفاده شود, Entity@ است و مشخص میکند این کلاس از نوع Entity Bean است. Entity Bean نیاز است تا یک primary key داشته باشد. به این ترتیب با استفاده از id@ مشخص میکنیم که کدام متغیر به عنوان Primary key باشد. همچنین میتوان id را برای متد نیز قرار دارد. برای مثال id@ میتواند بجای اینکه بر روی متغیر id قرار بگیرد, بر روی متد getId قرار بگیرد. توجه داشته باشید که در اینجا برای کمتر شدن حجم کد ها, از نوشتن متد getter و setter خودداری کردیم. اگر بخواهیم متغیر ها با تنظیمات و Mapping خاصی ذخیره شوند, از column@ استفاده میکنیم. Column Annotation این متغیر ها را دارد:
- name : نام ستون را مشخص میکند
- length : حداکثر طول مجاز داده را مشخص می کند
- nullable : اگر این مقدار برابر با false باشد, ستون به صورت not Null تعریف میشود
- unique : مشخص میکند که دو مقدار یکسان در این ستون ثبت نشود (یکتا بودن داده ها)
اگر بخواهیم یک متغیر در پایگاه داده ذخیره نشود, میتوان از transient@ استفاده کرد و مشخص میکند که این متغیر را نادیده بگیرد.
به این ترتیب کلاس فوق به این صورت تغییر میکند:
@Entity @Table(name = "Profile_Table") public class Profile { @Id private int id; @Column(nullable = false) private String name; private String password; @Column(name = "images") private String imageUrl; private String description; private String username; @Transient private Gender gender; } enum Gender{ male, female, }
اکنون در کلاس بالا مقدار name نمیتواند null باشد. همچنین مقادیر imageUrl در یک ستون با نام images ذخیره می شوند. متغیر Gender که در اینجا جنسیت کاربر را مشخص میکند, در پایگاه داده ذخیره نمیشود.
در این مقاله سعی بر این شد تا ساختار پایگاه داده و همچنین Annotation های مورد نیاز برای ایجاد یک Mapping دقیق تر بر روی یک جدول را بررسی کنیم. در مقاله بعد ارتباط میان جداول را نیز با استفاده از Annotation ها ایجاد میکنیم.
سری مقالات آموزش Java Enterprise ادامه دارد.
با ما همراه باشید.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.