2.1 คำอธิบายประกอบ @Entity, @Table

หากคุณต้องการแมปคลาสของคุณกับตารางในฐานข้อมูล คุณต้องเพิ่มคำอธิบายประกอบมากถึง 3 รายการสำหรับสิ่งนี้

ก่อนอื่น คุณต้องเพิ่มคำอธิบายประกอบในชั้น@Entityเรียน คำอธิบายประกอบหน้าคลาสนี้จะบอกไฮเบอร์เนตว่านี่ไม่ใช่แค่คลาส แต่เป็นคลาสพิเศษที่ต้องเก็บอ็อบเจกต์ไว้ในฐานข้อมูล

ตัวอย่าง:

@Entity
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

นี่ก็เพียงพอแล้วสำหรับ Hibernate ในการจัดการกับวัตถุของคลาสนี้ด้วยวิธีพิเศษ

คำอธิบายประกอบที่สอง@Tableคือ ด้วยความช่วยเหลือของมัน คุณสามารถตั้งชื่อตารางในฐานข้อมูลที่จะเชื่อมโยงคลาสนี้ ตัวอย่าง:

@Entity
@Table(name="user")
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

หากชื่อคลาสและชื่อตารางเหมือนกัน@Tableสามารถละเว้นคำอธิบายประกอบได้

นอกจากนี้ หากแอปพลิเคชันของคุณทำงานกับตารางจากหลายสคีมาในเวลาเดียวกัน คุณต้องระบุสคีมาเฉพาะที่ตารางนั้นตั้งอยู่:

@Entity
@Table(name="user", schema="test")
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

ใช่ ทุกอย่างง่ายอย่างที่คิด

2.2 คำอธิบายประกอบ @Column

สิ่งสำคัญประการที่สองที่ต้องทราบคือการแมปคอลัมน์ตารางกับเขตข้อมูลคลาส ในเวอร์ชันที่ง่ายที่สุด Hibernate จะจับคู่ฟิลด์ของคลาสเอนทิตีของคุณกับคอลัมน์ของตารางที่ต้องการ

หากคุณต้องการควบคุมความแตกต่างทั้งหมดของการแมป คุณสามารถใช้คำอธิบาย@Columnประกอบ ตัวอย่าง:

@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มีพารามิเตอร์ต่าง ๆ ด้านล่างเราจะพิจารณาพารามิเตอร์ที่ได้รับความนิยมสูงสุด:

# ชื่อแอตทริบิวต์ ประเภทแอตทริบิวต์ คำอธิบาย
1 ชื่อ สตริง ตั้งชื่อคอลัมน์ตารางสำหรับเขตข้อมูลคลาส
2 มีเอกลักษณ์ บูลีน ค่าฟิลด์ทั้งหมดต้องไม่ซ้ำกัน
3 เป็นโมฆะ บูลีน เขตข้อมูลสามารถเป็นโมฆะ
4 ความยาว นานาชาติ ความยาวสูงสุด (สำหรับสตริง)

มาเพิ่มข้อจำกัดบางอย่างให้กับฟิลด์ของคลาส User Entity ของเรา:

  • ชื่อผู้ใช้ต้องไม่ซ้ำกันและมีความยาวไม่เกิน 100 อักขระ
  • ระดับสามารถเป็นโมฆะ
  • วันที่สร้างต้องไม่เป็นโมฆะ

จากนั้นคำอธิบายประกอบของเราจะกลายเป็น:

@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;
}

คุณสามารถสร้างอ็อบเจกต์ประเภทUserและแม้แต่กำหนด ฟิลด์ ว่าง ทั้งหมด ให้กับมัน อย่างไรก็ตาม เมื่อคุณพยายามบันทึกลงในฐานข้อมูล Hibernate จะทำการตรวจสอบ และหากมีการละเมิดข้อจำกัดใดๆ ก็จะมีข้อยกเว้นเกิดขึ้น

2.3 คำอธิบายประกอบ @Id

และคำอธิบายประกอบที่สำคัญอีกประการหนึ่ง@Idคือ สามารถใช้เพื่อตั้งค่าคีย์หลักสำหรับตาราง

คุณเพียงแค่ต้องระบุคำอธิบายประกอบนี้สำหรับฟิลด์ที่ต้องการ - และไฮเบอร์เนตจะทำทุกอย่างเอง:

@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;
}

หากคุณต้องการให้ Hibernate สร้างIDของออบเจกต์ของคุณอย่างอิสระเมื่อเพิ่มลงในฐานข้อมูล คุณต้องเพิ่มคำอธิบายประกอบอีกหนึ่งรายการ@GeneratedValue- ตัวอย่างของเราจะมีลักษณะดังนี้:

@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;
}

เราละเว้นคำอธิบายประกอบ@Columnสำหรับ ฟิลด์ idที่นี่ เนื่องจากไม่มีข้อมูลที่มีค่า ชื่อฟิลด์และชื่อคอลัมน์ในตารางเหมือนกัน และด้วยคำอธิบายประกอบที่เหลือ Hibernate จึงเข้าใจแล้วว่าเรากำลังพูดถึงตาราง คอลัมน์.