ความแตกต่างระหว่างคืออะไร@Column
และ@Basic
คำอธิบายประกอบใน JPA? สามารถใช้ร่วมกันได้หรือไม่? ควรใช้ร่วมกันหรือไม่? หรือหนึ่งในนั้นพอเพียง?
ความแตกต่างระหว่างคืออะไร@Column
และ@Basic
คำอธิบายประกอบใน JPA? สามารถใช้ร่วมกันได้หรือไม่? ควรใช้ร่วมกันหรือไม่? หรือหนึ่งในนั้นพอเพียง?
คำตอบ:
@Basic
หมายความว่าแอตทริบิวต์จะยังคงอยู่และจะใช้การแม็ปมาตรฐาน มีพารามิเตอร์ที่ช่วยให้คุณระบุได้ว่าจะโหลดแอตทริบิวต์อย่างเกียจคร้านหรือไม่และเป็นโมฆะหรือไม่
@Column
อนุญาตให้คุณระบุชื่อของคอลัมน์ในฐานข้อมูลที่จะคงคุณสมบัติไว้
หากคุณระบุอย่างใดอย่างหนึ่งโดยไม่มีอีกอย่างคุณจะได้รับพฤติกรรมเริ่มต้นที่สมเหตุสมผลดังนั้นคนทั่วไปจึงใช้เพียงอย่างเดียวยกเว้นกรณีพิเศษ
ดังนั้นหากเราต้องการโหลดแอตทริบิวต์และระบุชื่อคอลัมน์เราสามารถพูดได้
@Basic(fetch=FetchType.LAZY)
@Column(name="WIBBLE")
หากเราไม่ต้องการค่าเริ่มต้นพฤติกรรมที่ไม่เกียจคร้านสิ่งนั้นก็@Column
เพียงพอแล้ว
นอกจากนี้ในการตอบ @ djna ของมันเป็นที่น่าสังเกตว่า@Basic
ควรจะเทียบกับ@OneToMany
, และ@ManyToOne
@ManyToMany
สามารถระบุได้เพียงรายการเดียวในคุณสมบัติใด ๆ
@Column
และ@JoinColumn
สามารถระบุพร้อมกับสิ่งเหล่านี้เพื่ออธิบายคุณสมบัติคอลัมน์ฐานข้อมูล
นี่คือชุดคำอธิบายประกอบสองชุดที่สามารถใช้ร่วมกันได้ แต่สามารถใช้คำอธิบายประกอบได้ครั้งละหนึ่งชุดเท่านั้น
เป็นที่น่าสังเกตว่า Basic ได้รับการออกแบบมาสำหรับฟิลด์ดั้งเดิม
http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes
แอตทริบิวต์พื้นฐานคือแอตทริบิวต์ที่คลาสแอตทริบิวต์เป็นประเภทพื้นฐานเช่น String, Number, Date หรือ primitive ค่าแอตทริบิวต์พื้นฐานสามารถแมปโดยตรงกับค่าคอลัมน์ในฐานข้อมูล
ประเภทและการแปลงที่รองรับขึ้นอยู่กับการใช้งาน JPA และแพลตฟอร์มฐานข้อมูล แอ็ตทริบิวต์พื้นฐานใด ๆ ที่ใช้ชนิดที่ไม่ได้แม็พโดยตรงกับประเภทฐานข้อมูลสามารถต่ออนุกรมกับประเภทฐานข้อมูลไบนารีได้
วิธีที่ง่ายที่สุดในการแมปแอตทริบิวต์พื้นฐานใน JPA คือไม่ต้องทำอะไรเลย แอตทริบิวต์ใด ๆ ที่ไม่มีคำอธิบายประกอบอื่น ๆ และไม่ได้อ้างอิงเอนทิตีอื่น ๆ จะถูกแมปโดยอัตโนมัติเป็นพื้นฐานและจะทำให้เป็นอนุกรมได้หากไม่ใช่ประเภทพื้นฐาน ชื่อคอลัมน์สำหรับแอตทริบิวต์จะเป็นค่าเริ่มต้นโดยตั้งชื่อเหมือนกับชื่อแอตทริบิวต์เป็นตัวพิมพ์ใหญ่
คำอธิบายประกอบ @Basic ถูกนำไปใช้กับเอนทิตี JPA และของ @Column ถูกนำไปใช้กับแอตทริบิวต์เสริมของคอลัมน์ฐานข้อมูล @Basic annotation กำหนดว่าฟิลด์เอนทิตีสามารถเป็นค่าว่างได้หรือไม่ ในทางกลับกัน,
@Basic
โดยไม่ต้อง@Column
ด้วยเหตุนี้optional
และnullable
คุณสมบัติจึงมีอยู่ในทั้งสองอย่าง ฉันถูกไหม?