मेरे पास दो इकाइयां हैं जिन्हें मैं एकाधिक कॉलम के माध्यम से शामिल करना चाहता हूं। इन कॉलम को @Embeddable
ऑब्जेक्ट द्वारा साझा किया जाता है जो दोनों इकाइयों द्वारा साझा किया जाता है। नीचे दिए गए उदाहरण में, Foo
में केवल एक Bar
हो सकता है लेकिन Bar
में कई Foo
एस हो सकते हैं (जहां AnEmbeddableObject
Bar
के लिए एक अनूठी कुंजी है)।मल्टी-कॉलम हाइबरनेट/जेपीए एनोटेशन में शामिल हों
@Entity
@Table(name = "foo")
public class Foo {
@Id
@Column(name = "id")
@GeneratedValue(generator = "seqGen")
@SequenceGenerator(name = "seqGen", sequenceName = "FOO_ID_SEQ", allocationSize = 1)
private Long id;
@Embedded
private AnEmbeddableObject anEmbeddableObject;
@ManyToOne(targetEntity = Bar.class, fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "column_1", referencedColumnName = "column_1"),
@JoinColumn(name = "column_2", referencedColumnName = "column_2"),
@JoinColumn(name = "column_3", referencedColumnName = "column_3"),
@JoinColumn(name = "column_4", referencedColumnName = "column_4")
})
private Bar bar;
// ... rest of class
}
और बार वर्ग:
@Entity
@Table(name = "bar")
public class Bar {
@Id
@Column(name = "id")
@GeneratedValue(generator = "seqGen")
@SequenceGenerator(name = "seqGen", sequenceName = "BAR_ID_SEQ", allocationSize = 1)
private Long id;
@Embedded
private AnEmbeddableObject anEmbeddableObject;
// ... rest of class
}
अंत में AnEmbeddedObject
वर्ग: यहाँ एक उदाहरण है
@Embeddable
public class AnEmbeddedObject {
@Column(name = "column_1")
private Long column1;
@Column(name = "column_2")
private Long column2;
@Column(name = "column_3")
private Long column3;
@Column(name = "column_4")
private Long column4;
// ... rest of class
}
जाहिर स्कीमा है खराब सामान्यीकृत, यह एक प्रतिबंध है कि AnEmbeddedObject
' प्रत्येक टेबल में फ़ील्ड दोहराए जाते हैं।
org.hibernate.AnnotationException: referencedColumnNames(column_1, column_2, column_3, column_4) of Foo.bar referencing Bar not mapped to a single property
मैं JoinColumns अंकन की कोशिश की है insertable और updatable नहीं हैं, लेकिन कोई भाग्य के साथ:
समस्या मेरे पास हैमैं यह त्रुटि प्राप्त कि जब मैं हाइबरनेट अप प्रारंभ करने का प्रयास है। क्या हाइबरनेट/जेपीए एनोटेशन के साथ इसे व्यक्त करने का कोई तरीका है?
क्या होगा यदि आप 'Foo' से एम्बेड करने योग्य को हटा दें? – siebz0r