คีย์หลัก

มีอยู่

@รหัสคำอธิบายประกอบ

แต่ละ Entity เอนทิตีใน Hibernate ต้องมีฟิลด์ที่จะเป็นคีย์หลัก: ซึ่งมีค่าเฉพาะสำหรับออบเจกต์ทั้งหมดในคลาสนี้ โดยปกติแล้ว ฟิลด์นี้จะมีคำอธิบายประกอบด้วย@Id คำอธิบาย ประกอบ

แบบฟอร์มทั่วไป:

@Id
Class Name;

ตัวอย่าง:

@Entity
@Table(name="user")
class User
{
   @Id
   @Column(name="id")
   public Integer id;

   @Embedded
   public UserAddress address;

   @Column(name="created_date")
   public Date createdDate;
}

ตำแหน่งคำอธิบายประกอบ

อย่างไรก็ตาม คุณสามารถเขียน คำอธิบายประกอบ @Columnได้ ไม่เพียงแต่สำหรับฟิลด์เท่านั้น แต่ยังสำหรับเมธอดด้วย: สำหรับ getters หรือ setters ตัวอย่าง:

@Entity
@Table(name="user")
class User
{
    public Integer id;
    public Date createdDate;

   @Id
   @Column(name="id")
   public Integer getId() {
   	return this.id;
   }
   public void setId(Integer id)    {
  	this.id = id;
   }

   @Column(name="created_date")
   public Date getDate() {
  	return this.createdDate;
   }
   public void setCreatedDate(Date date) {
      this. createdDate = date;
   }
}

แนวทางนี้ปรากฏขึ้นเมื่อมีการเพิ่มคำอธิบายประกอบไม่เพียงแต่ในคลาสเท่านั้น แต่ยังรวมถึงอินเทอร์เฟซด้วย อินเทอร์เฟซไม่มีฟิลด์คลาส แต่มีเมธอด: getters และ setters ไฮเบอร์เนตรองรับทั้งสองมาตรฐานนี้

สำคัญ! หากคลาสมี คำอธิบาย ประกอบ @Entityฟิลด์ทั้งหมดของคลาสจะได้รับการปฏิบัติโดย Hibernate เป็นฟิลด์ถาวร (เว้นแต่จะมี คำอธิบายประกอบ @Transient ระบุไว้ ) แม้ว่าเขตข้อมูลจะไม่มีคำอธิบายประกอบใดๆ เลย: ในกรณีนี้ ชื่อคอลัมน์จะถือว่าเท่ากับชื่อเขตข้อมูลของคลาส

นี่คือจุดที่ คำอธิบายประกอบ @Idมีบทบาทสำคัญ หากใส่คำอธิบายประกอบในฟิลด์คลาส Hibernate จะดูชื่อและประเภทของฟิลด์ หาก ใส่คำอธิบายประกอบ @Idบนเมธอด Hibernate จะดูชื่อและประเภทของเมธอด

ตัวอย่างที่ 1:

@Entity
@Table(name="user")
class User
{
   @Id
    public Integer id;
    public Date createdDate;  //this field will be treated as if it had @Column(name=" createdDate ")

}

ตัวอย่างที่ 2:

@Entity
@Table(name="user")
class User
{
    public Integer id;
    public Date createdDate;

   @Id
   public Integer getId() {
   	return this.id;
   }
   public void setId(Integer id)    {
  	this.id = id;
   }

   public Date getDate() { //this field will be treated as if it had @Column(name=”date ”)
  	return this.createdDate;
   }
   public void setCreatedDate(Date date) {
  	this. createdDate = date;
   }

}

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

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

@GeneratedValue

คำอธิบายประกอบ นี้มักจะทำเครื่องหมายช่องเดียวกับ คำอธิบายประกอบ @Id เธอมี 4 กลยุทธ์การกำหนด ID ที่เป็นไปได้:

  • อัตโนมัติ
  • ตัวตน
  • ลำดับ
  • โต๊ะ

ตัวอย่างของคำอธิบายประกอบที่มีกลยุทธ์ที่ระบุ:

@Entity
@Table(name="user")
class User
{
    @Id
	@GeneratedValue(strategy = GenerationType.AUTO)
    public Integer id;

    public Date createdDate;
}

หากไม่ได้ระบุค่านโยบาย กลยุทธ์ AUTO จะถูกเลือก กลยุทธ์ AUTO หมายความว่าไฮเบอร์เนตจะกำหนด ID เอง โดยอิงจากประเภทข้อมูลของฟิลด์ ID เป็นหลัก

ทำไมต้องเป็นประเภท? ได้ เนื่องจากประเภทรหัสอาจแตกต่างกันมาก เช่น สตริงหรือ GUID ตัวอย่าง:

@Entity
@Table(name="user")
class User
{
    @Id
	@GeneratedValue
    public UUID id;

    public Date createdDate;
}

หมายเหตุ: GUID ใน Java เรียกว่า UUID ตามประวัติศาสตร์ และไฮเบอร์เนตสามารถสร้าง UUID เฉพาะสำหรับออบเจกต์ของคุณได้หากคุณขอให้สร้าง

กลยุทธ์ @GeneratedValue ที่หลากหลาย

หากคุณระบุประเภทGeneratedValue(strategy = GenerationType.IDENTITY)ไฮเบอร์เนตจะมอบสิทธิ์การตั้งค่า ID ให้กับชั้นฐานข้อมูล โดยปกติจะใช้คอลัมน์ที่มีป้ายกำกับว่า PRIMARY KEY, AUTOINCREMENT

แต่ถ้าคุณต้องการให้ ID ของคุณไม่ซ้ำกันและสร้างขึ้นตามอัลกอริทึมที่ระบุเป็นพิเศษ คุณสามารถใช้ คำอธิบายประกอบ GeneratedValue(strategy = GenerationType.SEQUENCE)ตัวอย่างเช่น:

@Entity
@Table(name="user")
public class User {
	@Id
	@GeneratedValue(generator = "sequence-generator")
	@GenericGenerator(
  	name = "sequence-generator",
  	strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
  	parameters = {
    	@Parameter(name = "sequence_name", value = "user_sequence"),
    	@Parameter(name = "initial_value", value = "4"),
    	@Parameter(name = "increment_size", value = "1")
    	}
	)
	private long userId;

	// ...
}

มีหลายวิธีในการสร้าง ID ตัวอย่างเช่น คุณอาจมีคีย์เฉพาะแบบผสมที่ประกอบด้วยหลายคอลัมน์ และเมื่อเขียนวัตถุลงในฐานข้อมูล คุณต้องกรอกข้อมูลในคอลัมน์เหล่านี้ทั้งหมด

ฉันจะไม่ให้รายละเอียด ถึงกระนั้น จุดประสงค์ของการบรรยายของเราก็คือการทำความคุ้นเคยกับ Hibernate และไม่ใช่เพื่อบอกเล่าเอกสารที่เป็นทางการอีกครั้ง

ความคิดเห็น
  • เป็นที่นิยม
  • ใหม่
  • เก่า
คุณต้องลงชื่อเข้าใช้เพื่อแสดงความคิดเห็น
หน้านี้ยังไม่มีความคิดเห็นใด ๆ