Hallo rda,
hab gerade erst das gleiche Problem gehabt. Musste Daten als XML exportieren und in eine andere DB importieren.
Erster Stolperstein: Im Mapping am Ende von collections 'embed-xml' auf 'false' setzen, ansonsten versucht Hibernate immer wieder
die Daten der übergeordneten Klasse dort einzusetzen und wird nie fertig.
Dann geht alles wie nach Lehrbuch:
Exportieren:
1.) dom4j Document erzeugen und Elemente mit einer Hibernate-Dom4jsession auslesen, diese in das dom4j-document schreiben
Code:
Document doc = DocumentFactory.getInstance().createDocument();
Element rootElement = doc.addElement("Items");
Session dbsession = HibernateUtil.getSession();
Session dom4jSession = dbsession.getSession(EntityMode.DOM4J);
List results = dom4jSession.createQuery("from Items").list();
Iterator iter = results.iterator();
while (iter.hasNext()) {
Element applicant = (Element) iter.next();
rootElement.add(applicant);
}
File file = new File(System.getProperty("java.io.tmpdir"),"export.xml");
FileOutputStream stream = new FileOutputStream(file);
XMLWriter writer = new XMLWriter(stream);
writer.write(doc);
writer.close();
....
Einlesen:
2.) Das dom4j-document öffnen, durch die Elemente laufen und einer Hibernate-dom4j-session übergeben und speichern.
Code:
//Zuerst xml als stream öffnen, dann:
SAXReader xmlReader = new SAXReader();
doc = xmlReader.read(stream);
Element root = doc.getRootElement();
Iterator iter = root.elementIterator();
Session dom4jSession = session.getSession(EntityMode.DOM4J);
while (iter.hasNext()) {
Element item = (Element) iter.next();
dom4jSession.saveOrUpdate("de.test.Item", item);
}
Gruß,