2012-07-04 16 views
9

मैं वर्तमान में हाइबरनेट एचबीएम मैपिंग्स से एनोटेशन तक अपनी परियोजना माइग्रेट कर रहा हूं। जहां तक ​​मैंने छोटी कक्षाओं के साथ निपटाया था, सबकुछ आसान था। लेकिन मेरे पास एक ही विशाल कक्षाएं हैं और मैं इस वर्ग के लिए मैपिंग और एनोटेशन दोनों को मिश्रण करने का प्रयास करता हूं। मैंने पढ़ा है कि हाइबरनेट गुण "hibernate.mapping.precedence" का उपयोग करके और इसे "एचबीएम, कक्षा" के बजाय "कक्षा, एचबीएम" पर सेट करना संभव था। (देखें: In Hibernate: is it possible to mix Annotations and XML configuration for an Entity?)हाइबरनेट: मैपिंग से एनोटेशन तक माइग्रेट करना - क्या एचबीएम और एनोटेशन मिश्रण करना संभव है?

उदाहरण के लिए मैं निम्नलिखित दस्तावेज़ वर्ग है:

@Entity 
@Table(name="DOCUMENT") 
public class Document { 
    @Column(name="DESCRIPTION") 
    private String description; 
} 

और निम्नलिखित Document.hbm.xml फ़ाइल:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
<hibernate-mapping> 
    <class name="Document" table="DOCUMENT" > 
    <id name="id" column="DOCUMENT_ID" type="long" /> 
    </class> 
</hibernate-mapping> 

मेरी hibernate.cfg.xml फ़ाइल में मैं डाल:

<property name="hibernate.mapping.precedence">class, hbm</property> 
<mapping class="Document"/> 
<mapping resource="Document.hbm.xml"/> 

मेरे समस्या यह है कि यह है: - अगर मैं "वर्ग में कहें, HBM "प्राथमिकता के लिए मेरे पास कक्षा दस्तावेज में केवल मेरी टिप्पणियां हैं - अगर मैं" एचबीएम, कक्षा "डालता हूं तो मेरे पास केवल मेरी मैपिंग्स एचबीएम रिसोर्स

क्या कोई भी दोहराता है यदि एनोटेशन दोनों होने का कोई तरीका है और एचबीएम मैपिंग्स?

धन्यवाद

कामरान

पुनश्च: मैं का उपयोग करें: 4.1.4 हाइबरनेट और स्प्रिंग फ्रेमवर्क 3.1.1

उत्तर

11

आप एक ही वर्ग के लिए उन्हें मिश्रण नहीं कर सकते। section 1.2 of hibernate annotations के अंत में:

आप उसी सत्र फ़ैक्टरी के साथ एनोटेटेड लगातार कक्षाओं और क्लासिक hbm.cfg.xml घोषणाओं को मिश्रित कर सकते हैं। हालांकि आप कई बार (चाहे एनोटेटेड या एचबीएम.एक्सएमएल के माध्यम से) घोषित नहीं कर सकते हैं। आप किसी इकाई पदानुक्रम में कॉन्फ़िगरेशन रणनीतियों (एचबीएम बनाम एनोटेशन) को मिश्रित नहीं कर सकते हैं।

एचबीएम फ़ाइलों से एनोटेशन तक माइग्रेशन प्रक्रिया को कम करने के लिए, कॉन्फ़िगरेशन तंत्र एनोटेशन और एचबीएम फ़ाइलों के बीच मैपिंग डुप्लिकेशन का पता लगाता है। एचबीएम फाइलों को एनोटेटेड मेटाडाटा पर कक्षा से कक्षा के आधार पर पर प्राथमिकता दी जाती है। आप hibernate.mapping.precedence प्रॉपर्टी का उपयोग कर प्राथमिकता बदल सकते हैं। डिफॉल्ट एचबीएम, कक्षा है, इसे कक्षा में बदल रहा है, एचबीएम एक संघर्ष होने पर एचबीएम फाइलों पर एनोटेटेड कक्षाओं को प्राथमिकता देगा।

एनोटेशन और एचबीएम फाइलों का उपयोग कक्षा दो बार घोषित कर रहा है। इसलिए, किसी को कक्षा में कक्षा के आधार पर दूसरे पर प्राथमिकता दी जाएगी (कक्षा से कक्षा के आधार का अर्थ है कि प्रत्येक वर्ग के लिए, केवल एचबीएम फ़ाइल या एनोटेशन का उपयोग किया जाता है)।

+0

प्रिय पाब्लो, इस स्पष्टीकरण के लिए बहुत बहुत धन्यवाद। ! – marcam

+0

दोस्त बहुत उपयोगी है –

संबंधित मुद्दे