मुझे माता-पिता के बच्चे के प्रकार के संबंधों में समस्या का सामना करना पड़ रहा है।
हाइबरनेट दस्तावेज़ माता-पिता से विदेशी कुंजी का मूल्य प्राप्त करने के लिए बाल वर्ग में "अनेक-से-एक" संबंध जोड़ने के लिए कहते हैं। लेकिन इस संबंध को काम करने के लिए मुझे बाल वर्ग में चालान संपत्ति जोड़नी है जो माता-पिता को बच्चे में एक परिपत्र समावेशन पेश करती है और मेरे धारावाहिक को तोड़ देती है। क्या कोई इंगित कर सकता है कि मैं कहाँ गलती कर रहा हूँ?
यहाँ मेरा कोड है:
चालान.जावा
public class Invoice implements Serializable {
private Long id;
private Date invDate;
private String customer;
private Set<InvoiceItem> items;
... getters/setters ...
}
चालानआइटम.जावा
public class InvoiceItem implements Serializable {
private Long itemId;
private long productId;
private int quantity;
private double price;
private Invoice invoice; //???????
... getters/setters ...
}
चालान.एचबीएम.एक्सएमएल
<class name="Invoice" table="Invoices">
<id name="id" column="ID" type="long">
<generator class="native" />
</id>
<property name="invDate" type="timestamp" />
<property name="customer" type="string" />
<set name="items" inverse="true" cascade="all-delete-orphan">
<key column="invoiceId" />
<one-to-many class="InvoiceItem" />
</set>
</class>
InvoiceItem.hbm.xml
<class name="InvoiceItem" table="InvoiceItems">
<id name="itemId" type="long" column="id">
<generator class="native" />
</id>
<property name="productId" type="long" />
<property name="quantity" type="int" />
<property name="price" type="double" />
<many-to-one name="invoiceId" class="Invoice" not-null="true"/> <!--????????-->
</class>
1 उत्तर
यदि आप व्युत्क्रम = "सत्य" विशेषता को हटाते हैं, तो आपके पास इनवॉइस इटैम में इनवॉइस का संदर्भ होना आवश्यक नहीं है। फिर हाइबरनेट InvoiceItem तालिका में एक विदेशी कुंजी का उपयोग करने के बजाय एक अलग मैपिंग तालिका बनाएगा।
InvoiceItem सेट पर inverse
एट्रिब्यूट को हटा दें, और इनवॉइस आइटम से इनवॉइस प्रॉपर्टी को भी हटा दें, और मैपिंग में संबंधित many-to-one
और आपको वह मिल जाना चाहिए जो आप चाहते हैं।
वैकल्पिक रूप से, आप इनवॉइस इटैम में इनवॉइस संदर्भ को क्षणिक के रूप में चिह्नित कर सकते हैं, और डिसेरिएलाइज़ेशन के दौरान मान को पॉप्युलेट करना संभाल सकते हैं: इनवॉइस में आइटम्स के सेट पर पुनरावृति करें, और प्रत्येक आइटम पर invoice
प्रॉपर्टी को मालिकाना इनवॉइस पर सेट करें।
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।