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 จึงเข้าใจแล้วว่าเรากำลังพูดถึงตาราง คอลัมน์.
GO TO FULL VERSION