ฉันคิดว่านั่น@EmbeddedId
อาจเป็นรายละเอียดมากกว่าเนื่องจาก@IdClass
คุณไม่สามารถเข้าถึงวัตถุคีย์หลักทั้งหมดโดยใช้ตัวดำเนินการเข้าถึงฟิลด์ใด ๆ โดยใช้สิ่งที่@EmbeddedId
คุณสามารถทำได้ดังนี้:
@Embeddable class EmployeeId { name, dataOfBirth }
@Entity class Employee {
@EmbeddedId EmployeeId employeeId;
...
}
สิ่งนี้ให้ความเข้าใจที่ชัดเจนเกี่ยวกับฟิลด์ที่สร้างคีย์คอมโพสิตเนื่องจากถูกรวมไว้ในคลาสที่เข้าถึงโดยใช้ตัวดำเนินการเข้าถึงฟิลด์
ความแตกต่างอีกด้วย@IdClass
และ@EmbeddedId
เมื่อมันมาถึงการเขียน HQL:
กับ@IdClass
คุณเขียน:
เลือก e.name จาก Employee e
และ@EmbeddedId
คุณต้องเขียน:
เลือก e.employeeId.name จาก Employee e
คุณต้องเขียนข้อความเพิ่มเติมสำหรับแบบสอบถามเดียวกัน IdClass
บางคนอาจเถียงว่าแตกต่างจากภาษาธรรมชาติมากขึ้นเช่นเดียวกับการส่งเสริมโดย แต่ส่วนใหญ่แล้วการทำความเข้าใจอย่างถูกต้องจากข้อความค้นหาว่าเขตข้อมูลที่กำหนดเป็นส่วนหนึ่งของคีย์คอมโพสิตนั้นเป็นความช่วยเหลืออันล้ำค่า
@IdClass
แม้ว่าฉันจะชอบ@EmbeddedId
ในสถานการณ์ส่วนใหญ่ก็ตาม(เรียนรู้สิ่งนี้จากเซสชันของ Antonio Goncalves สิ่งที่เขาแนะนำคือเราสามารถใช้@IdClass
ในกรณีที่มีการผสม ไม่สามารถเข้าถึงคลาสคีย์หรือมาจากโมดูลอื่นหรือรหัสเดิมซึ่งเราไม่สามารถเพิ่มคำอธิบายประกอบได้ในสถานการณ์เหล่านั้น@IdClass
จะให้วิธีของเรา