-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: XML Relation Mapping
PostPosted: Tue Oct 11, 2005 4:09 am 
Irgendwie bin ich schwer enttäuscht von der Dokumentation des XML-Entity-Mappings in Hibernate.

Zwar funktioniert das Beispiel mit dem "XML-Export" mittlerweile nach einem durchgearbeiteten Wochenende, aber der XML-Import funktioniert nur teilweise.

Ich kann jedes dom4j.Element wunderbar einzeln mit Hilfe von session.saveOrUpdate(...) "importieren" aber sobald es an die Beziehungen geht, scheitert Hibernate.

Worum geht es?

Ich habe zwei simple Objekte, die in einer one-to-many Beziehung bidirektional verknüpft sind, also z.B. wie im Beispiel in der Dokumentation (nur mit einem (inverse) Set statt einer Map):

Code:
<class name="Account"
        table="ACCOUNTS"
        node="account">
       
    <id name="accountId"
            column="ACCOUNT_ID"
            node="@id"/>
           
    <many-to-one name="customer"
            column="CUSTOMER_ID"
            node="customer/@id"
            embed-xml="false"/>
           
</class>
<class name="Customer"
        table="CUSTOMER"
        node="customer">
       
    <id name="id"
            column="CUST_ID"
            node="@id"/>
           
    <set name="accounts"
            node="."
            embed-xml="true" inverse="true">
        <key column="CUSTOMER_ID"
                not-null="true"/>
        <one-to-many entity-name="Account"
                embed-xml="true"
                node="account"/>
    </set>
</class>


Außerdem habe ich ein XML-File, das ich importieren möchte. Dies sieht so aus wie das Output-File in der Dokumentation, nur ohne ID's (weil ich die ja beim initialen Import nicht habe)

Code:
<customer>
    <account>
        <customer/>
        <balance>100.29</balance>
    </account>
    <account>
        <customer/>
        <balance>32.29</balance>
    </account>
    <account>
        <customer/>
        <balance>34.29</balance>
    </account>
</customer>


Nun importiere ich das XML mit folgendem Codesniplet:

Code:
      
Session xmlsession = getSession().getSession(EntityMode.DOM4J);
xmlsession.save("Customer", doc.getRootElement());
xmlsession.flush();


(Wobei doc das dom4j.Document ist).

Am Ende vergibt er jedem einzelnen Objekt die ID (also dem Customer und dem Account) aber die Spalte CUSTOMER_ID in der Tabelle ACCOUNTS bleibt null.

Wenn ich das Customer-Objekt dann in der "normalen" Session anschauen will, dann hat er keine Accounts im Set.

Auch Hibernate.initialize() hilft hier nicht mehr weiter.

Zwar könnte ich die Objekte aufgrund ihrer Einfachheit einzeln einlesen und die Beziehung und die Properties selber zu Fuß setzen, aber wofür gibt es dann die Hibernate-XML-Mapping-Möglichkeit und wie sieht es dann mit kompliziertern Strukturen aus?

Warum kann Hibernate diese Beziehung beim Import nicht selbst lösen. Es weiß doch aus dem Mapping-File heraus, daß das Account-Element zu dem Customer im Parent-Element gehört...

Robert


Top
  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.