JavaRush /Kurslar /All lectures for UZ purposes /Hibernate'da sinflarni mapping qilish

Hibernate'da sinflarni mapping qilish

All lectures for UZ purposes
Daraja, Dars
Mavjud

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.


Qisqacha tahlil: JPA entitiyalarida ID'lar nima uchun kerak?

Videodagi maqola

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION