Bonjour.
Après avoir cherché sur de nombreux forums et fait pas mal de tests je me résigne à solliciter votre aide car je sèche complètement.
Je suis parti du chapitre 18 de la doc Hibernate sur le Mapping XML, pour essayer depuis un fichier XML d'insérer en base des enregistrements. Je trouvais l'exemple bien fait car il y a une relation many-to-one, parfait.
J'ai repris le code fourni dans la doc et testé avec un fichier xml contenant 2 entités Customer à sauvegarder, comprenant chacune 2 sous-entités Account.
Quand je récupère le contenu de mon fichier via le SAXBuilder dans un Document et que je cherche à faire un save sur ma liste d'éléments Customer retournée par une requête XPATH via un selectNodes, ces derniers sont bien sauvegardés, par contre, les sous entités Account ne sont pas présentes.
Pour essayer de sauvegarder mes Account j'ai essayé pour chaque entité Element de type Customer de récupérer les sous Element Account puis de les sauvargder, ça ça marche.
Mais j'aimerai savoir s'il n'est pas possible de faire directement quelque chose comme ça :
Pour avoir à la fois les Customer et les Account liés sauvegardés d'un coup.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 session = HibernateUtilDom4J.currentSession(); tx = session.beginTransaction(); SAXReader sreader = new SAXReader(false); Document doc = sreader.read(new File("xml/listeCustomers.xml")); List customers = doc.selectNodes("//customer"); for(Iterator ite = customers.iterator(); ite.hasNext();) { Element elt = (Element)ite.next(); session.replicate(Customer.class.getName(), elt,ReplicationMode.OVERWRITE); }
D'avance merci pour votre aide.
PS : voici mon xml source
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 <?xml version="1.0" encoding="ISO-8859-1"?> <liste> <customer id="123456789001"> <account short-desc="Savings" id="987632567001">120.0</account> <account short-desc="Credit Card" id="985612323001">250.5</account> <name> <first-name>Gavin</first-name> <initial>A</initial> <last-name>King</last-name> </name> </customer> <customer id="123456789002"> <account short-desc="Ristourne" id="987632567002">300</account> <account short-desc="Cash" id="985612323002">450</account> <name> <first-name>Niko</first-name> <initial>KG</initial> <last-name>King 1er</last-name> </name> </customer> </liste>
Partager