Bonjour à tous,
je travaille sur une application d'import / export de données depuis/vers des fichier XML.
Nous utilisons hibernate pour les connexion en base, et les librairies de dom4j pour faire les import depuis les XML.
Dans mon mapping, j'ai des clés composites et ce sont ces clés qui me pose problèmes:
voici mon mapping:
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 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="toto.mapping.Gazette" table="GAZETTE" schema="SCHEMA" entity-name="GAZETTE"> <composite-id name="id" class="toto.mapping.GazetteId"> <key-property name="nogazette" type="java.lang.Short" node="NOGAZETTE"> <column name="NOGAZETTE"/> </key-property> <key-property name="yygazette" type="java.lang.Short" node="YYGAZETTE"> <column name="YYGAZETTE"/> </key-property> </composite-id> <property name="dtpubli" type="java.util.Date" node="DTPUBLI"> <column name="DTPUBLI" length="10"/> </property> <property name="stgazette" type="java.lang.Short" node="STGAZETTE"> <column name="STGAZETTE" not-null="true"/> </property> </class> </hibernate-mapping>
voici un exemple de XML en entrée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <GAZETTE> <NOGAZETTE>1</NOGAZETTE> <YYGAZETTE>2006</YYGAZETTE> <DTPUBLI>2000-01-03</DTPUBLI> <STGAZETTE>1</STGAZETTE> </GAZETTE>
et voici l'erreur que j'ai:
et le code provoquant l'erreur:
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
23
24
25
26
27
28
29 org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): GAZETTE at org.hibernate.id.Assigned.generate(Assigned.java:33) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:91) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:530) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:518) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:514) at org.epoline.soprano.datamig.operation.dataimporter.DataImporter$InsertDataElementHandler.onEnd(DataImporter.java:682) at org.dom4j.io.DispatchHandler.onEnd(DispatchHandler.java:202) at org.dom4j.io.SAXContentHandler.endElement(SAXContentHandler.java:268) at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source) at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at org.dom4j.io.SAXReader.read(SAXReader.java:465) at toto.DataImporter.importOneFile(DataImporter.java:376) at toto.DataImporter.execute(DataImporter.java:310) at toto.executeOperations(DataMig.java:171) at toto.main(toto.java:125)
Si quelqu'un a une piste...
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 Transaction tx = null; tx = session.beginTransaction(); reader.resetHandlers(); reader.addHandler("/dataset/" + currentTableName, new InsertDataElementHandler(currentTableName, session)); try { reader.read(new InputSource(input_path)); } catch (DocumentException e) { logTableCounters(session); log.error(e.getMessage(), e); } catch (Exception e) { logTableCounters(session); log.error(e.getMessage(), e); }
Merci d'avance pour votre aide
Partager