-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 12 posts ] 
Author Message
 Post subject: Supression d'objet + corruption de base.
PostPosted: Thu Sep 04, 2008 6:08 am 
Newbie

Joined: Thu Oct 18, 2007 10:54 am
Posts: 8
Hibernate version: Apparament, toutes les version 3

Mapping documents:
Voici les entity que j'utilise:

Code:
@Entity
public class Expression extends Base{

   private Operator operator;
   
   @ManyToOne
   public Operator getOperator() {
      return operator;
   }
   public void setOperator(Operator operator) {
      this.operator = operator;
   }
}

Code:
@Entity
public abstract class Operator extends Base{
   
   private Collection<Expression> expression;
   
   public Operator() {
      super();
   }

   @OneToMany(mappedBy="operator")
   public Collection<Expression> getExpression() {
      return expression;
   }
   public void setExpression(Collection<Expression> expression) {
      this.expression = expression;
   }
}

Code:
@Entity
public class Function extends Operator{

   public Function() {
      super();
   }   
}


Code between sessionFactory.openSession() and session.close(): n/a

Full stack trace of any exception that occurs:
Code:
11:04:44,093 WARN  [hibernate.util.JDBCExceptionReporter] SQL Error: 0, SQLState: 23503
11:04:44,093 ERROR [hibernate.util.JDBCExceptionReporter] ERROR: update or delete on table "operatorentite" violates foreign key constraint "fkad0054a77444cbb0" on table "expressionentite"
  Détail : Key (id)=(ff808181195c9ab501195ca1101d0091) is still referenced from table "expressionentite".
11:04:44,102 ERROR [event.def.AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: could not delete: [ejb.dao.function.FunctionEntite#ff808181195c9ab501195ca1101d0091]
   at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:94)
   at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
   at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2569)
   at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2725)
   at org.hibernate.action.EntityDeleteAction.execute(EntityDeleteAction.java:97)
   at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
   at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
   at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:172)
   at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
   at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
   at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
   at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
   at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:504)
   at com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.beforeCompletion(SynchronizationImple.java:114)
   at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.beforeCompletion(TwoPhaseCoordinator.java:247)
   at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:86)
   at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:177)
   at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1389)
   at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:135)
   at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:87)
   at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:175)
   at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:87)
   at org.jboss.aspects.tx.TxInterceptor$RequiresNew.invoke(TxInterceptor.java:253)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:95)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77)
   at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:240)
   at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:210)
   at org.jboss.ejb3.stateless.StatelessLocalProxy.invoke(StatelessLocalProxy.java:84)
   at $Proxy898.deleteFunction(Unknown Source)
   at sun.reflect.GeneratedMethodAccessor779.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:585)
   at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:118)
   at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126)
   at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:195)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:95)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77)
   at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:240)
   at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:210)
   at org.jboss.ejb3.stateless.StatelessLocalProxy.invoke(StatelessLocalProxy.java:84)
   at $Proxy898.deleteFunction(Unknown Source)
   ...
Caused by: org.postgresql.util.PSQLException: ERROR: update or delete on table "operatorentite" violates foreign key constraint "fkad0054a77444cbb0" on table "expressionentite"
  Détail : Key (id)=(ff808181195c9ab501195ca1101d0091) is still referenced from table "expressionentite".
   at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1548)
   at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1316)
   at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:191)
   at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:452)
   at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:351)
   at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:305)
   at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
   at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2551)
   ... 185 more
11:04:44,109 WARN  [arjuna.logging.arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator_2] TwoPhaseCoordinator.beforeCompletion - failed for com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple@46c5e
javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not delete: [ejb.dao.function.FunctionEntite#ff808181195c9ab501195ca1101d0091]
   at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614)
   at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:513)
   at com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.beforeCompletion(SynchronizationImple.java:114)
   at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.beforeCompletion(TwoPhaseCoordinator.java:247)
   at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:86)
   at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:177)
   at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1389)
   at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:135)
   at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:87)
   at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:175)
   at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:87)
   at org.jboss.aspects.tx.TxInterceptor$RequiresNew.invoke(TxInterceptor.java:253)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:95)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77)
   at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:240)
   at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:210)
   at org.jboss.ejb3.stateless.StatelessLocalProxy.invoke(StatelessLocalProxy.java:84)
   at $Proxy898.deleteFunction(Unknown Source)
   at sun.reflect.GeneratedMethodAccessor779.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:585)
   at ejb.voCache.VOCacheTransactionInterceptor.intercept(VOCacheTransactionInterceptor.java:58)
   at sun.reflect.GeneratedMethodAccessor778.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:585)
   at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:118)
   at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126)
   at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:195)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:95)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77)
   at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
   at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:240)
   at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:210)
   at org.jboss.ejb3.stateless.StatelessLocalProxy.invoke(StatelessLocalProxy.java:84)
   ...
Caused by: org.hibernate.exception.ConstraintViolationException: could not delete: [ejb.dao.function.FunctionEntite#ff808181195c9ab501195ca1101d0091]
   at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:94)
   at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
   at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2569)
   at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2725)
   at org.hibernate.action.EntityDeleteAction.execute(EntityDeleteAction.java:97)
   at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
   at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
   at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:172)
   at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
   at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
   at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
   at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
   at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:504)
   ... 175 more
Caused by: org.postgresql.util.PSQLException: ERROR: update or delete on table "operatorentite" violates foreign key constraint "fkad0054a77444cbb0" on table "expressionentite"
  Détail : Key (id)=(ff808181195c9ab501195ca1101d0091) is still referenced from table "expressionentite".
   at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1548)
   at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1316)
   at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:191)
   at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:452)
   at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:351)
   at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:305)
   at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
   at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2551)
   ... 185 more
   
javax.ejb.EJBTransactionRolledbackException: javax.transaction.RollbackException: [com.arjuna.ats.internal.jta.transaction.arjunacore.commitwhenaborted] [com.arjuna.ats.internal.jta.transaction.arjunacore.commitwhenaborted] Can't commit because the transaction is in aborted state



Lors de la relecture

Code:
11:18:16,277 INFO  [event.def.DefaultLoadEventListener] Error performing load command
org.hibernate.InstantiationException: Cannot instantiate abstract class or interface: ejb.dao.operator.OperatorEntite
   at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:101)
   at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:123)
   at org.hibernate.tuple.entity.AbstractEntityTuplizer.instantiate(AbstractEntityTuplizer.java:374)
   at org.hibernate.persister.entity.AbstractEntityPersister.instantiate(AbstractEntityPersister.java:3634)
   at org.hibernate.impl.SessionImpl.instantiate(SessionImpl.java:1302)
   at org.hibernate.impl.SessionImpl.instantiate(SessionImpl.java:1291)
   at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1323)
   at org.hibernate.loader.Loader.getRow(Loader.java:1230)
   at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:603)
   at org.hibernate.loader.Loader.doQuery(Loader.java:724)
   at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
   at org.hibernate.loader.Loader.loadEntity(Loader.java:1881)
   at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:71)
   at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:65)
   at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3072)
   at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:434)
   at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:415)
   at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:165)
   at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:223)
   at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:126)
   at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:905)
   at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:873)
   at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:590)
   at org.hibernate.type.EntityType.resolve(EntityType.java:412)
   at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:139)
   at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:877)
   at org.hibernate.loader.Loader.doQuery(Loader.java:752)
   at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
   at org.hibernate.loader.Loader.loadEntity(Loader.java:1881)
   at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:71)
   at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:65)
   at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3072)
   at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:434)
   at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:415)
   at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:165)
   at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:223)
   at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:126)
   at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:905)
   at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:873)
   at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:590)
   at org.hibernate.type.EntityType.resolve(EntityType.java:412)
   at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:139)
   at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:877)
   at org.hibernate.loader.Loader.doQuery(Loader.java:752)
   at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
   at org.hibernate.loader.Loader.doList(Loader.java:2228)
   at org.hibernate.loader.Loader.listUsingQueryCache(Loader.java:2157)
   at org.hibernate.loader.Loader.list(Loader.java:2117)
   at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
   at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361)
   at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
   at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
   at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
   ...
11:18:16,294 INFO  [event.def.DefaultLoadEventListener] Error performing load command
org.hibernate.InstantiationException: Cannot instantiate abstract class or interface: OperatorEntite
   at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:101)
   at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:123)
   at org.hibernate.tuple.entity.AbstractEntityTuplizer.instantiate(AbstractEntityTuplizer.java:374)
   at org.hibernate.persister.entity.AbstractEntityPersister.instantiate(AbstractEntityPersister.java:3634)
   at org.hibernate.impl.SessionImpl.instantiate(SessionImpl.java:1302)
   at org.hibernate.impl.SessionImpl.instantiate(SessionImpl.java:1291)
   at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1323)
   at org.hibernate.loader.Loader.getRow(Loader.java:1230)
   at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:603)
   at org.hibernate.loader.Loader.doQuery(Loader.java:724)
   at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
   at org.hibernate.loader.Loader.loadEntity(Loader.java:1881)
   at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:71)
   at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:65)
   at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3072)
   at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:434)
   at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:415)
   at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:165)
   at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:223)
   at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:126)
   at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:905)
   at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:873)
   at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:590)
   at org.hibernate.type.EntityType.resolve(EntityType.java:412)
   at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:139)
   at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:877)
   at org.hibernate.loader.Loader.doQuery(Loader.java:752)
   at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
   at org.hibernate.loader.Loader.loadEntity(Loader.java:1881)
   at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:71)
   at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:65)
   at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3072)
   at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:434)
   at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:415)
   at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:165)
   at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:223)
   at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:126)
   at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:905)
   at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:873)
   at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:590)
   at org.hibernate.type.EntityType.resolve(EntityType.java:412)
   at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:139)
   at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:877)
   at org.hibernate.loader.Loader.doQuery(Loader.java:752)
   at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
   at org.hibernate.loader.Loader.doList(Loader.java:2228)
   at org.hibernate.loader.Loader.listUsingQueryCache(Loader.java:2157)
   at org.hibernate.loader.Loader.list(Loader.java:2117)
   at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
   at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361)
   at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
   at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
   at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
   ...



Name and version of the database you are using: PostgreSQL 8.2

The generated SQL (show_sql=true):
Code:
11:55:00,096 INFO  [STDOUT] Hibernate:
    delete
    from
        Function
    where
        id=?
11:55:00,105 INFO  [STDOUT] Hibernate:
    delete
    from
        Operator
    where
        id=?


Debug level Hibernate log excerpt: n/a



Bonjour,

J'ai remarqué un problème très génant pouvant conduire à une corruption de ma base de donnée:

Dans mon projet, je possède un entity de type "Expression" qui est rattaché à un entity "Operator" qui est abstrait.
Et enfin un objet "Function" héritant de "Operator".

Voici le diagramme UML correspondant:

Image

Le problème que j'ai trouvé est le suivant:

Si j'essaye de supprimer une "Function" qui est lié à une expression, en utilisant la méthode remove de l'entity manager, il me sort l'exception ConstraintViolationException ce qui est tout-à-fait normal.
Ce qui l'est moins, c'est que la moitier du temps, bien que la fonction soit utilisé, il affiche toujours le message, mais supprime quand même la ligne de ma table functione sans supprimer la ligne de la table "operator" qui porte le même id.

En regardant le log sql, c'est comme-si hibernate avait committer la transaction juste après avoir supprimé la ligne de la table function.


Résultat:

Si j'essaye de faire un expression.getOperator(), il me sort l'exception:
Code:
Error performing load command
org.hibernate.InstantiationException: Cannot instantiate abstract class or interface: OperatorEntite

Et je me retrouve avec une base corrompu...

Merci davance.


Top
 Profile  
 
 Post subject:
PostPosted: Fri Sep 12, 2008 8:20 am 
Proxool Developer
Proxool Developer

Joined: Tue Aug 26, 2003 10:42 am
Posts: 373
Location: Belgium
Je n'ai pas de "solution" a ton problème de "delete".
Toutefois, le fait que ta DB soit corrompue après cette erreur - et ce bien qu'une exception ait été levée - montre que tu as au moins un problème de gestion de tes transactions. Cette dernière aurait dû faire un rollback...

_________________
If you found my post helpful, please rate it! Thanks


Top
 Profile  
 
 Post subject:
PostPosted: Fri Sep 12, 2008 5:02 pm 
Newbie

Joined: Thu Oct 18, 2007 10:54 am
Posts: 8
pour gérer les ransaction j'utilise sur les methodes de ma facade:

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)

Pourtant la transaction à bien effectué un rollback, sinon l'exception retournée n'aurait pas été une EJBTransactionRolledbackException.


Top
 Profile  
 
 Post subject:
PostPosted: Fri Sep 12, 2008 5:02 pm 
Newbie

Joined: Thu Oct 18, 2007 10:54 am
Posts: 8
Pour gérer les transactions j'utilise sur les méthodes de ma façade EJB Stateless:
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)

Pourtant la transaction à bien effectué un rollback, sinon l'exception retournée n'aurait pas été une EJBTransactionRolledbackException.


Top
 Profile  
 
 Post subject:
PostPosted: Fri Sep 12, 2008 5:08 pm 
Proxool Developer
Proxool Developer

Joined: Tue Aug 26, 2003 10:42 am
Posts: 373
Location: Belgium
REQUIRES_NEW indique qu'il faut exécuter cette méthode dans une autre transaction que celle actuellement ouverte... Les modifications effectuées au sein de cette transaction seront annulées - alors que ce qui est ou sera fait dans la transaction englobante fera un commit...

Es-tu sur que ce n'est pas plutot un REQUIRED dont tu as besoin ?

_________________
If you found my post helpful, please rate it! Thanks


Top
 Profile  
 
 Post subject:
PostPosted: Fri Sep 12, 2008 5:14 pm 
Newbie

Joined: Thu Oct 18, 2007 10:54 am
Posts: 8
Je ne croit pas qu'il existe de transaction englobante car la façade est le seul point d'entrée sur le métier.

le lookup sur cette façade est fait depuis des controllers jsf donc à priori je ne voit pas où il a démarré une autre transaction.

De plus:

Si un autre appel métier est effectué au même moment (par un autre utilisateur) et que la transaction échoue pour la première, il ne faut pas que les modifications de la secondes personne soit annulé, d'où le REQUIRES_NEW.

A moins que je n'ai rien compris sur le fonctionnement des transactions.


Top
 Profile  
 
 Post subject:
PostPosted: Fri Sep 12, 2008 5:24 pm 
Proxool Developer
Proxool Developer

Joined: Tue Aug 26, 2003 10:42 am
Posts: 373
Location: Belgium
SuperPat wrote:
Si un autre appel métier est effectué au même moment (par un autre utilisateur) et que la transaction échoue pour la première, il ne faut pas que les modifications de la secondes personne soit annulé, d'où le REQUIRES_NEW.

A moins que je n'ai rien compris sur le fonctionnement des transactions.


Deux appels concurrents seront exécutés avec deux threads différentes.
Les transactions sont par thread.
Un REQUIRED est donc suffisant - il indique juste que dans le contexte de l'appel actuel (et donc de la thread d'exécution) - une transaction est nécessaire pour exécuter cette méthode.
Un REQUIRES_NEW indique que si une transaction est déjà active pour la thread courant, alors elle doit être suspendue et une nouvelle doit être crée pour cette exécution. Cela sert quand - par exemple - tu ne veux pas que la transaction englobante soit annulée si l'appel échoue.

Dans ton cas, effectivement (d'après le stack-trace) les deux sont équivalents.

En conclusion, je n'explique toujours pas ta corruption de DB...
... à moins que ce ne soit des left over au niveau de la 2nd level cache (si tu en as une). As-tu déjà essayé de redémarrer l'application et de reloader l'objet (ss tentative de delete) - as-tu le même problème.

Une analyse du contenu de ta DB devrait également t'aider à comprendre ce qui s'est passé... Confirmes-tu que les données sont effectivement modifiées - et d'une façon incorrecte ?

_________________
If you found my post helpful, please rate it! Thanks


Top
 Profile  
 
 Post subject:
PostPosted: Sat Sep 13, 2008 6:27 am 
Newbie

Joined: Thu Oct 18, 2007 10:54 am
Posts: 8
Je testerais avec required.

Le cache d'Hibernate n'est pas en cause car effectivement la base est bien corrompu.
Lorsque cela se produit sur une base de production, je suis obligé de fabriquer des requêtes SQL pour nettoyer la base...


Top
 Profile  
 
 Post subject:
PostPosted: Sat Sep 13, 2008 6:48 am 
Proxool Developer
Proxool Developer

Joined: Tue Aug 26, 2003 10:42 am
Posts: 373
Location: Belgium
Plusieurs autres pistes/remarques:

(1)
Ta relation entre Operator et Expression semble être bidirectionnelle (suis pas un expert du mapping par annotation - mais c'est ce que je semble comprendre de ton exemple).
Operator a une collection d'expressions et chaque expression semble avoir un lien vers l'operator qui la contient. Dans ce genre de mapping, la collection Operation.expression devrait être "inverse". Ceci veut dire que:
- pour ajouter un element à la collection il faut faire Expression.setOperator() et non Operation.getExpressions().add(expression)...
- idem pour le remove

Got it ?

(2)
La classe Operator est abstraite - dans ton exemple seule la classe Function est concrète - et c'est donc bien la seule qui peut être persistée correctement.

De nouveau, je ne sais pas comment indiquer cela via les annotations, mais tu dois d'une manière ou d'une autre indiquer la chose à Hibernate.

C'est bien ce qui m'étonne dans ton stacktrace: Hibernate se plaint de ne pas pouvoir instancier la classe abstraite Operator - ce qui est bien normale!

Es-tu sur de ton mapping pour ce genre de class hierarchy ?
Comment fait Hibernate pour détecter dans ce qu'il charge de la DB qu'il s'agit d'une instance de Function ou une autre sous-classe de Operator? Tu devrais normalement avoir un discriminant dans le cas ou tu utilises une seule table pour toutes les sous-classes, ou bien une table par classe...

Pourquoi ne pas commencer dans d'un premier temps avec Operator comme classe concrète...

_________________
If you found my post helpful, please rate it! Thanks


Top
 Profile  
 
 Post subject:
PostPosted: Sat Sep 13, 2008 11:10 am 
Newbie

Joined: Thu Oct 18, 2007 10:54 am
Posts: 8
(1) je fait bien un Expression.setOperator(), si on regarde dans la table expression il y a bien un attribut operator_id et dans la table operator, il n'y a rien.

(2) pour simplifier le problème, je n'ai mis qu'une seule classe héritant de operator, mais j'en ai bien plus (Arithmétique, Logique, String, Date)
j'utilise une table pour operateur + une autre table pour chaque type héritant de ceuli-ci.


C'est pour cela que je pense que la transaction à déconné car il semble avoir commité le DELETE FROM function alors que le DELETE FROM operator, exécuté juste après a échoué.

De toute façon il est pas normale qu'hibernate provoque une corruption de base quelque soit la transaction utilisé, c'est pourquoi je pense à un bug.


Top
 Profile  
 
 Post subject:
PostPosted: Sat Sep 13, 2008 5:08 pm 
Proxool Developer
Proxool Developer

Joined: Tue Aug 26, 2003 10:42 am
Posts: 373
Location: Belgium
SuperPat wrote:
De toute façon il est pas normale qu'hibernate provoque une corruption de base quelque soit la transaction utilisé, c'est pourquoi je pense à un bug.

SI une transaction était bien ouverte,
SI la transaction a fait un rollback
SI toutes les opérations se sont faites dans la même transaction
ALORS aucun changement n'a pu être fait sur la DB

De plus, cette corruption n'est en rien liée à Hibernate - mais bien au système transactionnel... C'est bien le principe d'une transaction.


Par ailleurs, tu n'as toujours pas expliqué en quoi la DB est corrompue: quand tu analyses les données, qu'est-ce qui n'est plus correct ?

SuperPat wrote:
(2) pour simplifier le problème, je n'ai mis qu'une seule classe héritant de operator...

Si tu veux véritablement simplifier le problème, je te conseille de ne faire - dans un premier temps - aucun héritage et de transformer Operator en non-abstract. Tu supprimeras ainsi une variable du problème...

Car de problème il y en a bien deux:
(1) problème à la suppression de tes entités - il s'agit ici d'un problème de mapping
(2- problème d'apparent corruption de données (je dis apparente car il reste à démontrer que les données ne sont plus correctes - le fait que Hibernate ne sache plus relire peut être dû à un pbl de mapping)

_________________
If you found my post helpful, please rate it! Thanks


Top
 Profile  
 
 Post subject:
PostPosted: Mon Sep 15, 2008 3:40 am 
Newbie

Joined: Thu Oct 18, 2007 10:54 am
Posts: 8
la corruption provient bien du fait qu'il y a des lignes dans operator dont les ID n'apparaissent dans aucunes des tables hérités.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 12 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.