Bonjour,
Je suis nouveau sur ce forum et débute en hibernate. Je ne comprends pas pourquoi lors d'une requete de lecture (récupération d'une personne et de ses associations avec les immeubles dans lesquels elle est) j'ai une erreur à cause d'une violation de contrainte (et donc d'une tentative d'insertion dans la base) ; pouvez vous m'expliquer pourquoi lors d'un "select" j'ai cette exception dûe à un "insert" ?
Mon mapping est - il erroné ? Y'a-t-il quelquechose à indiquer pour éviter cet insert ?
Merci d'avance pour votre aide.
(à savoir que les traces que j'ai mises indiquent que les immeubles sont bien récupérés, mais c'est après la récupération, lors du "commit" que l'exception apparait)
Hibernate version: 3
Mapping de ma personne pour l'association vers les building :
<set name="listPersonBuilding" table="T_PRSBUILD_EA4">
<key column="PBU_FK_ID_PER" not-null="true"/>
<composite-element class="com.sgcib.pops.business.model.person.PersonBuilding">
<property name="officeName" column="PBU_VA_OFFICENAME" type="java.lang.String" length="50" />
<property name="floor" column="PBU_VA_FLOOR" type="java.lang.String" length="20" />
<property name="picture" column="PBU_VA_OFFICEPICTURE" type="java.lang.String" length="50" />
<property name="active" type="java.lang.Boolean" column="PBU_BL_ACTIVE" />
<property name="phone" column="PBU_VA_PHONE" type="java.lang.String" length="20" />
<property name="cell" column="PBU_VA_CELL" type="java.lang.String" length="20" />
<property name="fax" column="PBU_VA_FAX" type="java.lang.String" length="20" />
<property name="principal" type="java.lang.Boolean" column="PBU_BL_PRINCIPAL" />
<many-to-one name="building" column="PBU_FK_ID_BUI" />
</composite-element>
</set>
Code de ma requete de lecture :
Criteria lCriteria;
Object lResult;
try
{
lCriteria = getSession(true).createCriteria(pObjectClass);
if (pObjectClass.getName().equals("Person"))
{
lCriteria.setFetchMode("listPersonActivity", FetchMode.JOIN);
lCriteria.setFetchMode("listBuildings", FetchMode.JOIN);
}
lCriteria.add(Restrictions.idEq(pPk));
if (lCriteria.list().size() <= 0)
{
throw new FinderException("Item with identifier :" + pPk + " not found.");
}
lResult = lCriteria.list().get(0);
} catch (Throwable lThrowable)
{
sLogger.error("Problem during query execution : " + lThrowable.getMessage());
throw new TechnicalException(lThrowable);
}
return lResult;
Full stack trace of any exception that occurs:
13:04:01,582 - DEBUG - org.springframework.orm.hibernate3.SessionFactoryUtils - Closing Hibernate Session
org.springframework.dao.DataIntegrityViolationException: Hibernate operation: Could not execute JDBC batch update; SQL [insert into T_PRSBUILD_EA4 (PBU_FK_ID_PER, PBU_VA_OFFICENAME, PBU_VA_FLOOR, PBU_VA_OFFICEPICTURE, PBU_BL_ACTIVE, PBU_VA_PHONE, PBU_VA_CELL, PBU_VA_FAX, PBU_BL_PRINCIPAL, PBU_FK_ID_BUI) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]; ORA-00001: unique constraint (EA4MANAG2.PK_T_PRSBUILD_EA4) violated
; nested exception is java.sql.BatchUpdateException: ORA-00001: unique constraint (EA4MANAG2.PK_T_PRSBUILD_EA4) violated
java.sql.BatchUpdateException: ORA-00001: unique constraint (EA4MANAG2.PK_T_PRSBUILD_EA4) violated
at oracle.jdbc.dbaccess.DBError.throwBatchUpdateException(DBError.java:459)
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:4133)
at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:294)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:57)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:174)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:74)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:69)
at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:150)
at org.hibernate.persister.collection.AbstractCollectionPersister.deleteRows(AbstractCollectionPersister.java:975)
at org.hibernate.action.CollectionUpdateAction.execute(CollectionUpdateAction.java:46)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:239)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:223)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:274)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:730)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:324)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:86)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:584)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:496)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:469)
at org.springframework.transaction.interceptor.TransactionAspectSupport.doCommitTransactionAfterReturning(TransactionAspectSupport.java:266)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
at $Proxy1.findItemByPk(Unknown Source)
at com.sgcib.pops.persistence.person.dao.IntTestPersonHibernateDAOImpl.testFindItemByPk(IntTestPersonHibernateDAOImpl.java:178)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Name and version of the database you are using: Oracle 10 g
Partager