2009-05-03 14 views
5

मेरे पास कंपनी क्लास और कंपनीसेटिंग क्लास के बीच एक-से-एक संबंध है। जब मैं एक नई कंपनी वस्तु बनाने, (एक CompanySettings वस्तु अपनी सेटिंग्स संपत्ति के लिए कंपनी के निर्माता में बन जाता है), और फिरएनएचबेर्नेट, एक-से-एक मैपिंग, कैस्केड डालने

SaveOrUpdate(session, companyObject) 

मैं CompanySettings को कंपनी से झरना की डालने की उम्मीद है। हालांकि, ऐसा तब तक नहीं होता जब तक कि मैं स्पष्ट रूप से CompanySettings ऑब्जेक्ट पर SaveOrUpdate को भी कॉल नहीं करता। कंपनी सेटिंग्स वर्ग के लिए

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"`> 
    <class name="AST.Domain.Company, AST.Domain" table="Companies"> 
    <id name="EntityID" column="CompanyId"> 
     <generator class="guid.comb" /> 
    </id> 
    <property name="CompanyName" /> 
    . . . 
    <one-to-one name="Settings" class="AST.Domain.CompanySettings, AST.Domain" 
       constrained="true" lazy="false" /> 
    </class> 
</hibernate-mapping> 

मेरे मैपिंग फ़ाइल:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="AST.Domain.CompanySettings, AST.Domain" table="CompanySettings"> 
    <id name="EntityID" column="CompanyId"> 
     <generator class="foreign"> 
     <param name="property">Company</param> 
     </generator> 
    </id> 
    <property name="MaxUsers" /> 
    <one-to-one name="Company" class="AST.Domain.Company, AST.Domain" /> 
    </class> 
</hibernate-mapping> 

उत्तर

5

आप अपने one-to-one मानचित्रण पर cascade="all" निर्दिष्ट करने की कोशिश की है

मानचित्रण फ़ाइलों नीचे दिखाया गया है?

2

कंपनी मैपिंग में एक-से-एक के कैस्केड विशेषता को सेट करें।

लेकिन, एक और नोट पर: क्या आपने कंपनी सेटिंग को एक अलग इकाई के बजाय कंपनी के 'घटक' के रूप में मैप करने का विचार किया है?

ऐसा नहीं है कि 'कंपनी सेटिंग्स' एक 'मूल्य वस्तु' है, और एक घटक के रूप में बेहतर मैप किया जाना चाहिए?

ऐसा करके, आप कंपनी सेटिंग मान को उसी कंपनी में 'कंपनी' के रूप में रख सकते हैं, लेकिन इसे एक अलग वर्ग के रूप में माना जाएगा।

चूंकि यह एक-से-एक मैपिंग है, मुझे लगता है कि यह आपके डेटा मॉडल के लिए भी एक बेहतर विकल्प है।

फिर, अपने मानचित्रण कुछ इस तरह दिखेगा:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"`> 
    <class name="AST.Domain.Company, AST.Domain" table="Companies"> 
    <id name="EntityID" column="CompanyId"> 
     <generator class="guid.comb" /> 
    </id> 
    <property name="CompanyName" /> 
    . . . 
    <component name="Settings" class="AST.Domain.CompanySettings, AST.Domain"> 
     <property name="MaxUsers" /> 
    </component> 
    </class> 
</hibernate-mapping> 

आप वास्तव में 2 अलग वस्तुओं (कंपनी & CompanySettings होगा, और कंपनी के एक 'Companysettings' वस्तु है, लेकिन सेटिंग में सहेजा जाएगा कंपनी टेबल)।

या, क्या कोई विशेष कारण है कि आपने कंपनी सेटिंग को एक अलग तालिका में क्यों रखा है? मेरा मतलब है, यह एक-से-एक संबंध है इसलिए यह पूरी तरह से जरूरी नहीं है (और इमो भी एक बुरा अभ्यास :))।

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