Bonjour,
Je suis en train de refondre mon application web avec Hibernate, pour cela je fais des tests avec celui-ci. Mon environnement est le suivante : WSAD, bases de données DB2 sur AS400.
J'ai crée une simple table à 4 colonnes que j'ai appelé PERSONNE. Cette table possède 4 colonnes (ID, NOM, PRENOM, AGE).
J'essaye de rentrer 2 personne dans cette table, toutes les initialisations se déroulent bien, mais au moment tu commit, il y a un problème pourtant j'ai suivi toutes les procédures à la lettre.
Ci-joint une copie de ma console
Code:
Hibernate: insert into TSTCOMM.PERSONNE (NOM, PRENOM, AGE, ID) values (?, ?, ?, ?)
[21/11/05 17:11:45:614 CET] 5428b09c JDBCException W org.hibernate.util.JDBCExceptionReporter SQL Error: -7008, SQLState: 55019
[21/11/05 17:11:45:614 CET] 5428b09c JDBCException E org.hibernate.util.JDBCExceptionReporter [SQL7008] La table PERSONNE de TSTCOMM est incorrecte pour cette opération.
[21/11/05 17:11:45:614 CET] 5428b09c AbstractFlush E org.hibernate.event.def.AbstractFlushingEventListener Could not synchronize database state with session
[21/11/05 17:11:45:629 CET] 5428b09c AbstractFlush E org.hibernate.event.def.AbstractFlushingEventListener TRAS0014I: L'exception suivante a été consignée : org.hibernate.exception.GenericJDBCException: could not insert: [fr.nle.viveo.test.Personne]
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:91)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:79)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2077)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2426)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:51)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:243)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:227)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:296)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:905)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:345)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at fr.nle.viveo.test.Tests.WrightingTestInBdd(Tests.java:41)
at fr.nle.viveo.test.actions.WrigthInBddAction.execute(WrigthInBddAction.java:35)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:974)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:555)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:200)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:119)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:276)
at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:182)
at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:618)
at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:443)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:593)
Caused by: java.sql.SQLException: [SQL7008] La table PERSONNE de TSTCOMM est incorrecte pour cette opération.
at com.ibm.as400.access.JDError.throwSQLException(JDError.java:388)
at com.ibm.as400.access.AS400JDBCStatement.commonExecute(AS400JDBCStatement.java:640)
at com.ibm.as400.access.AS400JDBCPreparedStatement.executeUpdate(AS400JDBCPreparedStatement.java:949)
at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeUpdate(WSJdbcPreparedStatement.java:469)
at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:23)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2061)
... 37 more
.
org.hibernate.exception.GenericJDBCException: could not insert: [fr.nle.viveo.test.Personne]
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:91)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:79)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2077)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2426)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:51)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:243)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:227)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:296)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:905)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:345)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at fr.nle.viveo.test.Tests.WrightingTestInBdd(Tests.java:41)
at fr.nle.viveo.test.actions.WrigthInBddAction.execute(WrigthInBddAction.java:35)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:974)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:555)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:200)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:119)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:276)
at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:182)
at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:618)
at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:443)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:593)
Caused by: java.sql.SQLException: [SQL7008] La table PERSONNE de TSTCOMM est incorrecte pour cette opération.
at com.ibm.as400.access.JDError.throwSQLException(JDError.java:388)
at com.ibm.as400.access.AS400JDBCStatement.commonExecute(AS400JDBCStatement.java:640)
at com.ibm.as400.access.AS400JDBCPreparedStatement.executeUpdate(AS400JDBCPreparedStatement.java:949)
at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeUpdate(WSJdbcPreparedStatement.java:469)
at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:23)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2061)
... 37 more
[21/11/05 17:11:45:629 CET] 5428b09c LocalTranCoor E WLTC0033E: La ressource jdbc/Quebec a été annulée lors du nettoyage d'un LocalTransactionContainment non résolu.
[21/11/05 17:11:45:629 CET] 5428b09c LocalTranCoor E WLTC0032E: Une ou plusieurs ressources ont été annulées. Un LocalTransactionContainment comporte une opération d''annulation non résolue.
[21/11/05 17:11:45:645 CET] 5428b09c WebAppTransac E WTRN0043I: Transaction locale annulée par l'appel de setRollbackOnly.
[21/11/05 17:11:45:645 CET] 5428b09c WebGroup E SRVE0026E: [Erreur de servlet]-[LocalTransaction rolled-back due to setRollbackOnly]: com.ibm.ws.LocalTransaction.RolledbackException
at com.ibm.ws.LocalTransaction.LocalTranCoordImpl.cleanup(LocalTranCoordImpl.java:1073)
at com.ibm.ws.webcontainer.webapp.WebAppTransactionCollaborator.postInvoke(WebAppTransactionCollaborator.java:249)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:699)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:200)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:119)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:276)
at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:182)
at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:618)
at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:443)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:593)
Ci-dessous ma classe personne :
Code:
/*
* Créé le 14 nov. 05
*
* Pour changer le modèle de ce fichier généré, allez à :
* Fenêtre>Préférences>Java>Génération de code>Code et commentaires
*/
package fr.nle.viveo.test;
/**
* @author alecomte
*
* Pour changer le modèle de ce commentaire de type généré, allez à :
* Fenêtre>Préférences>Java>Génération de code>Code et commentaires
*/
public class Personne {
private int id;
private String nom;
private String prenom;
private int age;
/**
* @return
*/
public int getId() {
return id;
}
/**
* @return
*/
public String getNom() {
return nom;
}
/**
* @return
*/
public String getPrenom() {
return prenom;
}
/**
* @param i
*/
public void setId(int i) {
id = i;
}
/**
* @param string
*/
public void setNom(String string) {
nom = string;
}
/**
* @param string
*/
public void setPrenom(String string) {
prenom = string;
}
/**
* @return
*/
public int getAge() {
return age;
}
/**
* @param i
*/
public void setAge(int i) {
age = i;
}
}
Ci-dessous le mapping de ma classe personne
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="fr.nle.viveo.test.Personne" table="PERSONNE">
<id name="id" type="integer" unsaved-value="null">
<column name="ID" sql-type="int(4)"/>
<generator class="increment" />
</id>
<property name="nom" type="string">
<column name="NOM"/>
</property>
<property name="prenom" type="string">
<column name="PRENOM"/>
</property>
<property name="age" type="integer">
<column name="AGE"/>
</property>
</class>
</hibernate-mapping>
Ci-dessous ma classe tests qui va écrire dans la table
Code:
package fr.nle.viveo.test;
import org.hibernate.*;
import fr.nle.viveo.util.*;
import java.util.Iterator;
public class Tests {
public Tests(){}
public void WrightingTestInBdd()
throws HibernateException {
System.out.println("Enter WrightingTestInBdd...");
Session session = HibernateUtil.currentSession();
System.out.println("current Session OK");
Transaction tx = session.beginTransaction();
System.out.println("transaction OK");
try {
Personne personne1 = new Personne();
personne1.setNom("Dupont");
personne1.setPrenom("Jean");
personne1.setAge(44);
session.save(personne1);
System.out.println("OK");
Personne personne2 = new Personne();
personne2.setNom("Lambert");
personne2.setPrenom("Julie");
personne2.setAge(27);
session.save(personne2);
System.out.println("OK");
} catch (Exception ex) {
System.out.println("Problème de configuration : " + ex.getMessage());
}
tx.commit();
HibernateUtil.closeSession();
System.out.println("... Exit WrightingTestInBdd");
}
}
Il semblererait que le trasfert est possible mais ke ma table (ou bien mon insertion de données) ne soit pas bien ordonée (et vice versa)
MErci de votre aide