मेरे पास विरासत कोड है जिसे मैं नए कोड में मैप करने का प्रयास कर रहा हूं।जटिल जुड़ने के लिए हाइबरनेट मैपिंग
OLD_PERSON
pid
sid
name
age
NEW_PERSON
pid
sid
fid
age
RESOLVE_PERSON
pid
fid
status
जावा वर्ग
domain.Person {
ID _id;
String _name;
Integer _age;
}
विरासत दुनिया में, सिर्फ एक मेज था: OLD_TABLE। हाइबरनेट मैपिंग सरल था, सिर्फ एक वर्ग और इसके कॉलम। नई दुनिया में, मुझे उपर्युक्त 3 टेबल का उपयोग करना होगा और एक इकाई का उत्पादन करना होगा जहां नाम OLD_PERSON और से आयु NEW_PERSON से आता है। तो मूल रूप से एक SQL क्वेरी है:
select op.name as name, np.age as age
from OLD_PERSON op
INNER JOIN RESOLVE_PERSON rp
on rp.pid = op.pid
INNER JOIN NEW_PERSON np
on np.pid = rp.pid and np.fid = rp.fid and np.sid = op.sid
where rp.status = 'CURRENT'
अनुसंधान पर/मैंने पाया कि मैं "माध्यमिक टेबल" जो "तालिका में शामिल हों" हाइबरनेट एक्सएमएल में के समकक्ष हैं उपयोग कर सकते हैं googling। नोट: मैं एनोटेशन का उपयोग नहीं कर सकता क्योंकि यह कोड पुराना है और मैं अभी भी हाइबरनेट 3.5.6 पर हूं।
तो मैं अपने मानचित्रण फाइल के अंदर एक मेज में शामिल होने कहा:
<class name="domain.Person" table="OLD_PERSON">
<composite-id name="_id" class="Id">
<key-property access="property" name="key1" type="long" column="pid" />
<key-property access="property" name="key2" type="int" column="sid" />
<generator class="assigned" />
</composite-id>
<property name="_Name" type="String" column="name" />
<join table="NEW_PERSON" fetch="join" inverse="false">
<key>
<column name="pid" />
<column name="sid" />
</key>
<property name="_age" column="age" not-null="true" />
</join>
</class>
लेकिन शामिल होने के लिए NEW_PERSON तालिका RESOLVE_PERSON तालिका के साथ एक आंतरिक में शामिल होने की आवश्यकता है। मैंने उप-चयन का उपयोग करने का प्रयास किया लेकिन इसका उपयोग करने की सही चीज़ नहीं है। मैं यहां कहीं भी फॉर्मूला प्लग करने में असमर्थ हूं।
यह कैसे प्राप्त किया जा सकता है इस पर कोई संकेतक? जो मैं अनिवार्य रूप से पूछ रहा हूं वह है कि जॉइन पर मानदंड/बाधा जांच कैसे लागू करें।