2.1 @Entity, @Table annotatsiyalari
Agar sinfingizni ma'lumotlar bazasidagi jadvalga bog'lamoqchi bo'lsangiz, unga 3 ta annotatsiya qo'shishingiz kerak.
Birinchidan, sinfga @Entity annotatsiyasini qo'shing. Bu annotatsiya, sinf oldida bo'lsa, Hibernate'ga bu oddiy sinf emas, balki uning ob'ektlarini ma'lumotlar bazasida saqlash kerakligini aytadi.
Misol:
@Entity
class User {
public int id;
public String name;
public int level;
public Date createdDate;
}
Bu, Hibernate'ning bu sinfning ob'ektlari bilan alohida munosabatda bo'lishi uchun yetarli.
Ikkinchi annotatsiya — @Table. Uning yordamida sinf bog'lanadigan jadvalning nomini ko'rsatish mumkin. Misol:
@Entity @Table(name="user")
class User {
public int id;
public String name;
public int level;
public Date createdDate;
}
Agar sinfning nomi va jadvalning nomi bir xil bo'lsa, unda @Table annotatsiyasini ko'rsatish shart emas.
Shuningdek, ilova bir nechta shemalardagi jadvallar bilan ishlayotgan bo'lsa, jadval qaysi shemada joylashganligini ko'rsatishingiz kerak:
@Entity @Table(name="user", schema="test")
class User {
public int id;
public String name;
public int level;
public Date createdDate;
}
Ha, aynan shu darajada oddiy.
2.2 @Column annotatsiyasi
Ikkinchi muhim narsa - jadvalning ustunlarini sinf maydonlari bilan bog'lash. Eng oddiy variantda Hibernate o'zi sizning entity-sinffingizni kerakli jadval ustunlariga bog'laydi.
Agar siz mappingning barcha nozik tomonlarini nazorat qilmoqchi bo'lsangiz, @Column annotatsiyasidan foydalanishingiz mumkin. Misol:
@Entity @Table(name="user")
class User {
@Column(name="id")
public Integer id;
@Column(name="name")
public String name;
@Column(name="level")
public Integer level;
@Column(name="created_date")
public Date createdDate;
}
@Column annotatsiyasida turli xil parametrlar mavjud, biz ularning eng mashhurlarini ko'rib chiqamiz:
| # | Atribut nomi | Atribut turi | Tavsif |
|---|---|---|---|
| 1 | name | String | Sinfning maydoni uchun jadvalning ustun nomini belgilaydi |
| 2 | unique | boolean | Maydon qiymatlari noyob bo'lishi kerak |
| 3 | nullable | boolean | Maydon null qiymatini qabul qilishi mumkin |
| 4 | length | int | Maksimal uzunlik (stringlar uchun) |
Keling, bizning Entity-sinfimiz User uchun bir nechta cheklovlarni qo'shamiz:
- foydalanuvchi nomi noyob bo'lishi va 100 belgidan uzun bo'lmasligi kerak
- level null bo'lishi mumkin
- createdDate null bo'lmasligi kerak
Shunda bizning annotatsiyalarimiz quyidagicha ko'rinadi:
@Entity @Table(name="user")
class User {
@Column(name="id")
public Integer id;
@Column(name="name", unique=true, length=100)
public String name;
@Column(name="level", nullable=true)
public Integer level;
@Column(name="created_date", nullable=false)
public Date createdDate;
}
Siz User tipida ob'ekt yaratishingiz va unga barcha maydonlarga null qiymatini tayinlashingiz mumkin, lekin uni ma'lumotlar bazasiga saqlashga harakat qilganda Hibernate tekshiruvni amalga oshiradi va agar biron-bir cheklov buzilsa, xatolik chiqaradi.
2.3 @Id annotatsiyasi
Yana bir muhim annotatsiya - @Id. Uning yordamida jadvallarga asosiy kalit belgilash mumkin.
Bu annotatsiyani kerakli maydonga belgilash kifoya - Hibernate hammasini o'zi qiladi:
@Entity @Table(name="user")
class User {
@Id
@Column(name="id")
public Integer id;
@Column(name="name")
public String name;
@Column(name="level")
public Integer level;
@Column(name="created_date")
public Date createdDate;
}
Agar siz Hibernate'ning sizning ob'ektlaringiz IDsini ma'lumotlar bazasiga qo'shilganda avtomatik yaratishni xohlasangiz, yana bir annotatsiya - @GeneratedValueni qo'shishingiz kerak. Shunda bizning misol quyidagicha ko'rinadi:
@Entity @Table(name="user")
class User {
@Id
@GeneratedValue
public Integer id;
@Column(name="name")
public String name;
@Column(name="level")
public Integer level;
@Column(name="created_date")
public Date createdDate;
}
Bu erda biz id maydoni uchun @Column annotatsiyasini qo'ymadik, chunki u qimmatli ma'lumotga ega emas - maydonning nomi va jadval ustunining nomi bir xil, va qolgan annotatsiyalar orqali Hibernate jadval ustuni haqida gap ketayotganini tushunadi.
GO TO FULL VERSION