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.  [ 2 posts ] 
Author Message
 Post subject: Import d'un fichier xml en base de données : pb ac relation
PostPosted: Wed Jan 10, 2007 9:43 am 
Newbie

Joined: Wed Jan 10, 2007 9:28 am
Posts: 6
Bonjour,
Je voudrais effectuer l'importation d'un fichier xml directement en base de données, comme le permet hibernate 3

voila mon bout de code pour ceux que ca intéresse:

Session dom4jSession = (Session) currentSession.getSession(EntityMode.DOM4J);
Transaction transaction = currentSession.beginTransaction();

// Read document with DOM4J
SAXReader saxReader = new SAXReader();
File file = new File(xmlFilePath);
org.dom4j.Document xmldb = saxReader.read(file);
java.util.List l = xmldb.getRootElement().elements("pere");

Iterator it = l.iterator();
while(it.hasNext()){
Object next = it.next();
dom4jSession.save("chemin.pere", next);
}
transaction.commit();
currentSession.close();

La structure de mon info est de one-to-many :
Pere ---> enfant

Le fichier xml ressemble a ceci:

<peres ....>
<pere ...>
<enfants>
<enfant ...>
<enfant ...>
</enfants>
</pere>
<pere ...>
<enfants>
<enfant ...>
<enfant ...>
</enfants>
</pere>
</peres>

Lorsque j'exécute ce bout de code, l'import se fait bien, excepté qu'il n'importe pas les fils
Les peres sont dans leur table et rien dasn la table enfant

Est ce que lors de relation, c'est a l'utilisateur de recréer les objets avant de les rendre persistants dasn la bd ou hibernate gere ca tout seul. Si oui, quelles sont les options à lui indiquer dasn le fichier de mapping pour qu'il gere les enfants.

Les seuls exemples que j'ai trouvé sur internet, sont des cas avec une seule table, sans relations.

Merci d'avance


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jan 11, 2007 11:47 am 
Newbie

Joined: Wed Jan 10, 2007 9:28 am
Posts: 6
Je précise ma question : j'ai du nouveau

En fait, lors de l'import de pere, les lignes ont bien été prises en compte.
voila les traces SQL de hibernate :

// prend les séquences générées par la base de données pour les id du pere et de l'enfant
Hibernate: select SEQ_PERE_ID.nextval from dual
Hibernate: select SEQ_ENFANT_ID.nextval from dual

// Insertion dans la base de données lors du flush (inclus dans la méthode commit)
Hibernate: insert into PERE (champ1,champ2,...) values (?, ?, ...)
Hibernate: insert into ENFANT (champ1,champ2,...) values (?, ?, ...)

Donc ca, c'est le déroulement normal. Nikel SAUF QUE :

Lors de l'insertion de l'enfant dans la bd, j'ai un erreur de contrainte d'intégrité référentielle violée parce que hibernate n'a pas positionné le nouvel ID du pere (fourni par la séquence) dans l'ENFANT: Dans ENFANT, PERE_ID fait référence à un pere qui n'existe pas ou si par hasard il y en a un qui correspond à cet id, ce n'est pas le bon.


Ma question :
Savez vous si hibernate est sencé positionner l'ID du pere fourni par la bd dans l'enfant. Si oui quelles sont les options de config ou quelles sont les instructions à faire pour que ca se fasse. J'ai essayé de jouer avec reverse/inverse, ou le champ cascade dans les fichiers de
mapping.

Sinon, est ce que c'est à nous de les positionner à la main, enfant apres enfant ? Si oui quelle est la technique la plus simple.

Merci d'avance


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

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.