Question about merge
yantriki May 23, 2006 3:17 PMI want to modify the ModuleProperty collection of the Module class and then merge it back. When I use the
public Module updateModule(Module module){ em.merge(module) ; return module; }
in my stateless session bean, it throws exception (attached at the bottom of the post). When I individually persist or merge each ModuleProperty in the collection, it works, however I am getting "failed batch" exception when I try to remove a ModuleProperty using em.remove(property) and also removing from module
module.getProperties().remove(property)then call merge on the module. Am I doing something wrong?
I have the following two classes:
@Entity @Table(name="Module") public class Module implements Serializable{ @Id @GeneratedValue int moduleID; @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER) @JoinColumn(name="MODULE_ID") Collection<ModuleProperty> properties = new HashSet<ModuleProperty>(); public int getModuleID() { return moduleID; } public void setModuleID(int moduleID) { this.moduleID = moduleID; } public Collection<ModuleProperty> getProperties() { return properties; } public void setProperties(Collection<ModuleProperty> properties) { this.properties = properties; } }
@Entity @Table(name="ModuleProperty") public class ModuleProperty implements Serializable { /** * */ private static final long serialVersionUID = 1L; @EmbeddedId @AttributeOverrides({ @AttributeOverride(name="moduleID", column=@Column(name="MODULE_ID")), @AttributeOverride(name="name", column=@Column(name="NAME")) }) ModulePropertyPK id; String value; public ModulePropertyPK getId() { return id; } public void setId(ModulePropertyPK id) { this.id = id; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } }
@Embeddable public class ModulePropertyPK implements Serializable{ int moduleID; String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @ManyToOne @JoinColumn(name="MODULE_ID",nullable=false) public int getModuleID() { return moduleID; } public void setModuleID(int moduleID) { this.moduleID = moduleID; } @Override public int hashCode() { String tmp = name +moduleID; return tmp.hashCode(); } @Override public boolean equals(Object obj) { if(obj instanceof ModulePropertyPK){ ModulePropertyPK pk = (ModulePropertyPK)obj; return (pk.moduleID == this.moduleID && this.name != null && name.equals(pk.name)); } return false; } }
4:54:01,718 ERROR [JDBCExceptionReporter] failed batch
14:54:01,718 ERROR [AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.exception.GenericJDBCException: could not insert: [org.vss.ejb3.eb.ModuleProperty]
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2140)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2503)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:51)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:988)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:337)
at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:473)
at org.jboss.tm.TransactionImpl.doBeforeCompletion(TransactionImpl.java:1488)
at org.jboss.tm.TransactionImpl.beforePrepare(TransactionImpl.java:1107)
at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:321)
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$Required.invoke(TxInterceptor.java:192)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:54)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at org.jboss.aspects.security.RoleBasedAuthorizationInterceptor.invoke(RoleBasedAuthorizationInterceptor.java:167)
at org.jboss.ejb3.security.RoleBasedAuthorizationInterceptor.invoke(RoleBasedAuthorizationInterceptor.java:100)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:78)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:225)
at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:55)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:102)
at $Proxy155.updateElement(Unknown Source)
at org.vss.mbean.CORViewService.getHMSElementsAlarm(CORViewService.java:568)
at org.vss.mbean.CORViewService.scanHMSElement(CORViewService.java:389)
at org.vss.mbean.CORViewService.scanElement(CORViewService.java:283)
at org.vss.mbean.CORViewService$PollingThread.run(CORViewService.java:231)
Caused by: java.sql.BatchUpdateException: failed batch
at org.hsqldb.jdbc.jdbcStatement.executeBatch(Unknown Source)
at org.hsqldb.jdbc.jdbcPreparedStatement.executeBatch(Unknown Source)
at org.jboss.resource.adapter.jdbc.CachedPreparedStatement.executeBatch(CachedPreparedStatement.java:478)
at org.jboss.resource.adapter.jdbc.WrappedStatement.executeBatch(WrappedStatement.java:517)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58)
at org.hibernate.jdbc.BatchingBatcher.addToBatch(BatchingBatcher.java:34)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2120)
... 39 more
14:54:01,718 ERROR [STDERR] java.lang.RuntimeException: org.jboss.tm.JBossRollbackException: Unable to commit, tx=TransactionImpl:XidImpl[FormatId=257, GlobalId=OPT0051/3210, BranchQual=, localId=3210] status=STATUS_NO_TRANSACTION; - nested throwable: (javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not insert: [org.vss.ejb3.eb.ModuleProperty])
14:54:01,718 ERROR [STDERR] at org.jboss.aspects.tx.TxPolicy.handleEndTransactionException(TxPolicy.java:198)
14:54:01,718 ERROR [STDERR] at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:180)
14:54:01,718 ERROR [STDERR] at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:87)
14:54:01,718 ERROR [STDERR] at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:192)
14:54:01,718 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
14:54:01,718 ERROR [STDERR] at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
14:54:01,718 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
14:54:01,718 ERROR [STDERR] at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:54)
14:54:01,718 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
14:54:01,718 ERROR [STDERR] at org.jboss.aspects.security.RoleBasedAuthorizationInterceptor.invoke(RoleBasedAuthorizationInterceptor.java:167)
14:54:01,718 ERROR [STDERR] at org.jboss.ejb3.security.RoleBasedAuthorizationInterceptor.invoke(RoleBasedAuthorizationInterceptor.java:100)
14:54:01,718 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
14:54:01,718 ERROR [STDERR] at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:78)
14:54:01,718 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
14:54:01,718 ERROR [STDERR] at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47)
14:54:01,718 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
14:54:01,718 ERROR [STDERR] at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
14:54:01,718 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
14:54:01,718 ERROR [STDERR] at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:225)
14:54:01,718 ERROR [STDERR] at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:55)
14:54:01,718 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
14:54:01,718 ERROR [STDERR] at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:102)
14:54:01,718 ERROR [STDERR] at $Proxy155.updateElement(Unknown Source)
14:54:01,718 ERROR [STDERR] at org.vss.mbean.CORViewService.getHMSElementsAlarm(CORViewService.java:568)
14:54:01,718 ERROR [STDERR] at org.vss.mbean.CORViewService.scanHMSElement(CORViewService.java:389)
14:54:01,718 ERROR [STDERR] at org.vss.mbean.CORViewService.scanElement(CORViewService.java:283)
14:54:01,718 ERROR [STDERR] at org.vss.mbean.CORViewService$PollingThread.run(CORViewService.java:231)
14:54:01,718 ERROR [STDERR] Caused by: org.jboss.tm.JBossRollbackException: Unable to commit, tx=TransactionImpl:XidImpl[FormatId=257, GlobalId=OPT0051/3210, BranchQual=, localId=3210] status=STATUS_NO_TRANSACTION; - nested throwable: (javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not insert: [org.vss.ejb3.eb.ModuleProperty])
14:54:01,718 ERROR [STDERR] at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:369)
14:54:01,734 ERROR [STDERR] at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:175)
14:54:01,734 ERROR [STDERR] ... 25 more
14:54:01,734 ERROR [STDERR] Caused by: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not insert: [org.vss.ejb3.eb.ModuleProperty]
14:54:01,734 ERROR [STDERR] at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:562)
14:54:01,734 ERROR [STDERR] at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:482)
14:54:01,734 ERROR [STDERR] at org.jboss.tm.TransactionImpl.doBeforeCompletion(TransactionImpl.java:1488)
14:54:01,734 ERROR [STDERR] at org.jboss.tm.TransactionImpl.beforePrepare(TransactionImpl.java:1107)
14:54:01,734 ERROR [STDERR] at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:321)
14:54:01,734 ERROR [STDERR] ... 26 more
14:54:01,734 ERROR [STDERR] Caused by: org.hibernate.exception.GenericJDBCException: could not insert: [org.vss.ejb3.eb.ModuleProperty]
14:54:01,734 ERROR [STDERR] at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
14:54:01,734 ERROR [STDERR] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
14:54:01,734 ERROR [STDERR] at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
14:54:01,734 ERROR [STDERR] at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2140)
14:54:01,734 ERROR [STDERR] at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2503)
14:54:01,734 ERROR [STDERR] at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:51)
14:54:01,734 ERROR [STDERR] at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
14:54:01,734 ERROR [STDERR] at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232)
14:54:01,734 ERROR [STDERR] at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139)
14:54:01,734 ERROR [STDERR] at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297)
14:54:01,734 ERROR [STDERR] at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
14:54:01,734 ERROR [STDERR] at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:988)
14:54:01,734 ERROR [STDERR] at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:337)
14:54:01,734 ERROR [STDERR] at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:473)
14:54:01,734 ERROR [STDERR] ... 29 more
14:54:01,734 ERROR [STDERR] Caused by: java.sql.BatchUpdateException: failed batch
14:54:01,734 ERROR [STDERR] at org.hsqldb.jdbc.jdbcStatement.executeBatch(Unknown Source)
14:54:01,734 ERROR [STDERR] at org.hsqldb.jdbc.jdbcPreparedStatement.executeBatch(Unknown Source)
14:54:01,734 ERROR [STDERR] at org.jboss.resource.adapter.jdbc.CachedPreparedStatement.executeBatch(CachedPreparedStatement.java:478)
14:54:01,734 ERROR [STDERR] at org.jboss.resource.adapter.jdbc.WrappedStatement.executeBatch(WrappedStatement.java:517)
14:54:01,734 ERROR [STDERR] at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58)
14:54:01,734 ERROR [STDERR] at org.hibernate.jdbc.BatchingBatcher.addToBatch(BatchingBatcher.java:34)
14:54:01,734 ERROR [STDERR] at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2120)
14:54:01,734 ERROR [STDERR] ... 39 more
14:54:01,734 INFO [CORViewService] Waiting for element polling queue...