From: Steven V. (JIRA) <no...@at...> - 2006-03-31 12:42:28
|
ClassCastExcepton: java.lang.Long at org.hibernate.type.ComponentType.toLoggableString -------------------------------------------------------------------------------------- Key: ANN-298 URL: http://opensource.atlassian.com/projects/hibernate/browse/ANN-298 Project: Hibernate Annotations Type: Bug Environment: JBoss 4.0..3 EJB3-RC5 Hibernate 3.1.2 Reporter: Steven Verze When loging is set the INFO I get the following exception: javax.ejb.EJBException: java.lang.ClassCastException: java.lang.Long at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:69) at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:83) 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.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:219) at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:107) at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82) at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:580) at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:450) at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:290) at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:344) at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:202) Caused by: java.lang.ClassCastException: java.lang.Long at org.hibernate.type.ComponentType.toLoggableString(ComponentType.java:329) at org.hibernate.pretty.MessageHelper.collectionInfoString(MessageHelper.java:187) at org.hibernate.event.def.ReattachVisitor.removeCollection(ReattachVisitor.java:60) at org.hibernate.event.def.OnUpdateVisitor.processCollection(OnUpdateVisitor.java:46) at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:101) at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:61) at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:55) at org.hibernate.event.def.AbstractVisitor.process(AbstractVisitor.java:123) at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:72) at org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:790) at org.hibernate.impl.SessionImpl.delete(SessionImpl.java:768) at org.hibernate.ejb.AbstractEntityManagerImpl.remove(AbstractEntityManagerImpl.java:155) at org.jboss.ejb3.entity.InjectedEntityManager.remove(InjectedEntityManager.java:151) at com.teleglobal.modules.authentic.services.AuthenticAccountServiceBean.remove(AuthenticAccountServiceBean.java:99) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:109) at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79) 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.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:219) at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:107) at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82) at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:580) at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:450) at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:290) at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:344) at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:202) at org.jboss.remoting.RemoteClientInvoker.invoke(RemoteClientInvoker.java:163) at org.jboss.remoting.Client.invoke(Client.java:258) at org.jboss.remoting.Client.invoke(Client.java:221) at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:55) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:55) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:65) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:102) at $Proxy1.remove(Unknown Source) at com.teleglobal.modules.authentic.servcies.AuthenticAccountServiceTest.tearDown(AuthenticAccountServiceTest.java:23) at junit.framework.TestCase.runBare(TestCase.java:130) 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 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) The problem goes away when I turn logging down to WARN. I noticed that there was a similar bug (HHH-248) which was fixed in version 3.0.2 This exception really only occured when I used ManyToOne relationship using the referencedColumnName attribute and only when I tried to remove AuthenticAccount . My entities follow: @Entity @Table(name="ACCOUNT") @SequenceGenerator(name="ACCOUNT_SEQUENCE", sequenceName="ACCOUNT_SEQUENCE") public class AuthenticAccount implements Serializable { @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="ACCOUNT_SEQUENCE") @Column(name="ACN_ID") private long id; @Column(name="ACN_ACCOUNT_NUMBER", unique=true) private String accountNumber; // Default values for all authentic test accounts @Column(name="ACN_BALANCE_1") private long balance1 = 5000; @Column(name="ACN_STATUS") private String status = "O"; @Column(name="ACN_PRO_ID") private String proId = "11014"; @Column(name="ACN_CUR_ID") private long curId = 826; @Column(name="ACN_AMT_ID_1") private long amountId1 = 2; @Column(name="ACN_AMT_ID_2") private long amountId2 = 1; @Column(name="ACN_BALANCE_2") private long balance2 = 0; @Column(name="ACN_LAST_BATCH_UPDATE_DATE") private Date lastBatchUpdateDate; @Column(name="ACN_LAST_FEP_HOST_TRACE_NBR") private long lastFepHostTraceNumber = 0; @Column(name="ACN_LAST_HOST_FEP_TRACE_NBR") private long lastHostFepTraceNumber = 118; @Column(name="ACN_BILL_PAYMENT_FLG") private int billPaymentFlag = 1; @Column(name="ACN_TRANSFER_FLG") private int transferFlag = 0; @Column(name="ACN_FUNCTIONS") private int functions = 1; @Column(name="ACN_FEP_HOST_SUM") private long fepHostSum = 110; @Column(name="ACN_HOST_FEP_SUM") private long hostFepSum = 811233; @OneToOne(mappedBy="account", cascade=CascadeType.ALL, fetch=FetchType.EAGER) private Card card; @OneToMany(mappedBy="account", cascade=CascadeType.ALL, fetch=FetchType.EAGER) @JoinColumn(name="AMS_ACCOUNT_NUM", referencedColumnName="ACN_ACCOUNT_NUMBER", nullable = false, unique = true) private List<AuthenticAccountMiniStatement> miniStatements; public AuthenticAccount() { lastBatchUpdateDate = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss a") .parse("09/06/2005 12:00:00 AM", new ParsePosition(0)); card = new Card(); miniStatements = new ArrayList<AuthenticAccountMiniStatement>(); } public String getAccountNumber() { return accountNumber; } public void setAccountNumber(String accountNumber) { this.accountNumber = accountNumber; } public long getAmountId1() { return amountId1; } public void setAmountId1(long amountId1) { this.amountId1 = amountId1; } public long getAmountId2() { return amountId2; } public void setAmountId2(long amountId2) { this.amountId2 = amountId2; } public long getBalance1() { return balance1; } public void setBalance1(long balance1) { this.balance1 = balance1; } public long getBalance2() { return balance2; } public void setBalance2(long balance2) { this.balance2 = balance2; } public int getBillPaymentFlag() { return billPaymentFlag; } public void setBillPaymentFlag(int billPaymentFlag) { this.billPaymentFlag = billPaymentFlag; } public long getCurId() { return curId; } public void setCurId(long curId) { this.curId = curId; } public long getFepHostSum() { return fepHostSum; } public void setFepHostSum(long fepHostSum) { this.fepHostSum = fepHostSum; } public int getFunctions() { return functions; } public void setFunctions(int functions) { this.functions = functions; } public long getHostFepSum() { return hostFepSum; } public void setHostFepSum(long hostFepSum) { this.hostFepSum = hostFepSum; } public long getId() { return id; } public void setId(long id) { this.id = id; } public Date getLastBatchUpdateDate() { return lastBatchUpdateDate; } public void setLastBatchUpdateDate(Date lastBatchUpdateDate) { this.lastBatchUpdateDate = lastBatchUpdateDate; } public long getLastFepHostTraceNumber() { return lastFepHostTraceNumber; } public void setLastFepHostTraceNumber(long lastFepHostTraceNumber) { this.lastFepHostTraceNumber = lastFepHostTraceNumber; } public long getLastHostFepTraceNumber() { return lastHostFepTraceNumber; } public void setLastHostFepTraceNumber(long lastHostFepTraceNumber) { this.lastHostFepTraceNumber = lastHostFepTraceNumber; } public String getProId() { return proId; } public void setProId(String proId) { this.proId = proId; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public int getTransferFlag() { return transferFlag; } public void setTransferFlag(int transferFlag) { this.transferFlag = transferFlag; } public Card getCard() { return card; } public void setCard(Card card) { this.card = card; } public void addMiniStatement(AuthenticAccountMiniStatement miniStatement) { miniStatement.setAccount(this); this.miniStatements.add(miniStatement); } public void removeMiniStatement(AuthenticAccountMiniStatement miniStatement) { this.miniStatements.remove(miniStatement); } public List<AuthenticAccountMiniStatement> getMiniStatements() { return miniStatements; } public void setMiniStatements(List<AuthenticAccountMiniStatement> miniStatements) { this.miniStatements = miniStatements; } } @Entity @Table(name = "ACCOUNT_MINI_STATEMENT") @SequenceGenerator(name="MINI_STATEMENT_SEQUENCE", sequenceName="MINI_STATEMENT_SEQUENCE") public class AuthenticAccountMiniStatement implements Serializable { @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="MINI_STATEMENT_SEQUENCE") @Column(name="AMS_TXN_SEQ") private long id; @Column(name="AMS_TXN_CODE") private String transactionDescription = "LOAD"; @Column(name="AMS_TXN_DATE") private Date transactionDate = new Date(); @Column(name="AMS_TXN_AMOUNT") private long transactionAmount = 10; @Column(name="AMS_TRL_BUSINESS_DATE") private Date transactionLogBusinessDate = new Date(); @Column(name="AMS_TRL_ID") private long transactionLogId = 34610; @Column(name="AMS_GRP_SEQ") private long groupSequence = 1; @ManyToOne(fetch=FetchType.EAGER) @JoinColumn(name="AMS_ACCOUNT_NUM", referencedColumnName="ACN_ACCOUNT_NUMBER", nullable = false, unique = true) private AuthenticAccount account; public AuthenticAccountMiniStatement() { } public long getTransactionAmount() { return transactionAmount; } public void setTransactionAmount(long transactionAmount) { this.transactionAmount = transactionAmount; } public Date getTransactionDate() { return transactionDate; } public void setTransactionDate(Date transactionDate) { this.transactionDate = transactionDate; } public String getTransactionDescription() { return transactionDescription; } public void setTransactionDescription(String transactionDescription) { this.transactionDescription = transactionDescription; } public long getGroupSequence() { return groupSequence; } public void setGroupSequence(long groupSequence) { this.groupSequence = groupSequence; } public long getId() { return id; } public void setId(long id) { this.id = id; } public Date getTransactionLogBusinessDate() { return transactionLogBusinessDate; } public void setTransactionLogBusinessDate(Date transactionLogBusinessDate) { this.transactionLogBusinessDate = transactionLogBusinessDate; } public long getTransactionLogId() { return transactionLogId; } public void setTransactionLogId(long transactionLogId) { this.transactionLogId = transactionLogId; } public AuthenticAccount getAccount() { return account; } public void setAccount(AuthenticAccount account) { this.account = account; } } @Entity @Table(name="CARD") @SequenceGenerator(name="CARD_SEQUENCE", sequenceName="CARD_SEQUENCE") public class Card implements Serializable { @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="CARD_SEQUENCE") @Column(name="CRD_ID") private long id; @Column(name="CRD_PAN") private String primaryAccountNumber; @Column(name="CRD_STATUS_1") private String status1 = "A"; @Column(name="CRD_CURRENT_PVV") private long currentPvv = 0; @Column(name="CRD_PIN_RETRY_COUNT") private long pinRetryCount = 0; @Column(name="CRD_CUSTOM_INDEX_1") private String customIndex1 = "GC"; // Default values for all authentic test cards @Column(name="CRD_CARD_SEQUENCE_NBR") private long cardSequenceNumber = 0; @Column(name="CRD_CPD_ID") private long cpdId = 250; @Column(name="CRD_LAST_SOURCE") private String lastSource = "U"; @Column(name="CRD_FUNCTIONS") private int functions = 1; @Column(name="CRD_CURRENT_PIN_OFFSET") private String currentPinOffset = "0"; @Column(name="CRD_ISSUE_DATE_1") private Date issueDate1; @Column(name="CRD_EXPIRY_DATE_1") private Date expiryDate1; @Column(name="CRD_EXPIRY_DATE_2") private Date expiryDate2; @Column(name="CRD_STATUS_1_DATE") private Date status1Date; @ManyToOne(fetch=FetchType.EAGER) @JoinColumn(name="CRD_PRIMARY_ACN_ID", nullable=false, unique=true) private AuthenticAccount account; public Card() { this.issueDate1 = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss a").parse("09/06/2005 12:00:00 AM", new ParsePosition(0)); this.expiryDate1 = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss a").parse("01/06/2015 12:00:00 AM", new ParsePosition(0)); this.expiryDate2 = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss a").parse("01/06/2015 12:00:00 AM", new ParsePosition(0)); this.status1Date = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss a").parse("09/06/2005 12:00:00 AM", new ParsePosition(0)); } public String getPrimaryAccountNumber() { return primaryAccountNumber; } public void setPrimaryAccountNumber(String primaryAccountNumber) { this.primaryAccountNumber = primaryAccountNumber; } public long getCpdId() { return cpdId; } public void setCpdId(long cpdId) { this.cpdId = cpdId; } public String getCurrentPinOffset() { return currentPinOffset; } public void setCurrentPinOffset(String currentPinOffset) { this.currentPinOffset = currentPinOffset; } public long getCurrentPvv() { return currentPvv; } public void setCurrentPvv(long currentPvv) { this.currentPvv = currentPvv; } public String getCustomIndex1() { return customIndex1; } public void setCustomIndex1(String customIndex1) { this.customIndex1 = customIndex1; } public Date getExpiryDate1() { return expiryDate1; } public void setExpiryDate1(Date expiryDate1) { this.expiryDate1 = expiryDate1; } public Date getExpiryDate2() { return expiryDate2; } public void setExpiryDate2(Date expiryDate2) { this.expiryDate2 = expiryDate2; } public int getFunctions() { return functions; } public void setFunctions(int functions) { this.functions = functions; } public long getId() { return id; } public void setId(long id) { this.id = id; } public Date getIssueDate1() { return issueDate1; } public void setIssueDate1(Date issueDate1) { this.issueDate1 = issueDate1; } public String getLastSource() { return lastSource; } public void setLastSource(String lastSource) { this.lastSource = lastSource; } public long getPinRetryCount() { return pinRetryCount; } public void setPinRetryCount(long pinRetryCount) { this.pinRetryCount = pinRetryCount; } public long getCardSequenceNumber() { return cardSequenceNumber; } public void setCardSequenceNumber(long cardSequenceNumber) { this.cardSequenceNumber = cardSequenceNumber; } public String getStatus1() { return status1; } public void setStatus1(String status1) { this.status1 = status1; } public Date getStatus1Date() { return status1Date; } public void setStatus1Date(Date status1Date) { this.status1Date = status1Date; } public AuthenticAccount getAccount() { return account; } public void setAccount(AuthenticAccount account) { this.account = account; } } Further more, when I try to remove an AUthentic entity (with logging set to WARN), I find that the AuthenticMiniStatements are not removed. This probably should be raised as another bug. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Emmanuel B. (JIRA) <no...@at...> - 2006-06-26 21:27:00
|
[ http://opensource.atlassian.com/projects/hibernate/browse/ANN-298?page=comments#action_23421 ] Emmanuel Bernard commented on ANN-298: -------------------------------------- I run the following test on the domain model you gave me but I can't reproduce the issue on the latest version. If you can attach a simple reproducable test case I'll have a second look at it. I create a graph and execute the delete operation using Card card = new Card(); AuthenticAccountMiniStatement s = new AuthenticAccountMiniStatement(); AuthenticAccount acc = new AuthenticAccount(); card.setAccount( acc ); acc.setCard( card ); acc.setAccountNumber( "RERE"); acc.addMiniStatement( s ); Session session = openSession(); Transaction tx = session.beginTransaction(); session.save(acc); session.flush(); session.clear(); acc = (AuthenticAccount) session.get(AuthenticAccount.class, acc.getId() ); session.delete( acc ); //acc.removeMiniStatement( acc.getMiniStatements().get(0) ); session.flush(); tx.rollback(); session.close(); > ClassCastExcepton: java.lang.Long at org.hibernate.type.ComponentType.toLoggableString > -------------------------------------------------------------------------------------- > > Key: ANN-298 > URL: http://opensource.atlassian.com/projects/hibernate/browse/ANN-298 > Project: Hibernate Annotations > Type: Bug > Environment: JBoss 4.0..3 EJB3-RC5 > Hibernate 3.1.2 > Reporter: Steven Verze > > > When loging is set the INFO I get the following exception: > javax.ejb.EJBException: java.lang.ClassCastException: java.lang.Long > at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:69) > at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:83) > 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.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:219) > at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:107) > at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82) > at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:580) > at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:450) > at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:290) > at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:344) > at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:202) > Caused by: java.lang.ClassCastException: java.lang.Long > at org.hibernate.type.ComponentType.toLoggableString(ComponentType.java:329) > at org.hibernate.pretty.MessageHelper.collectionInfoString(MessageHelper.java:187) > at org.hibernate.event.def.ReattachVisitor.removeCollection(ReattachVisitor.java:60) > at org.hibernate.event.def.OnUpdateVisitor.processCollection(OnUpdateVisitor.java:46) > at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:101) > at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:61) > at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:55) > at org.hibernate.event.def.AbstractVisitor.process(AbstractVisitor.java:123) > at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:72) > at org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:790) > at org.hibernate.impl.SessionImpl.delete(SessionImpl.java:768) > at org.hibernate.ejb.AbstractEntityManagerImpl.remove(AbstractEntityManagerImpl.java:155) > at org.jboss.ejb3.entity.InjectedEntityManager.remove(InjectedEntityManager.java:151) > at com.teleglobal.modules.authentic.services.AuthenticAccountServiceBean.remove(AuthenticAccountServiceBean.java:99) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:585) > at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:109) > at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47) > at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) > at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79) > 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.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:219) > at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:107) > at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82) > at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:580) > at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:450) > at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:290) > at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:344) > at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:202) > at org.jboss.remoting.RemoteClientInvoker.invoke(RemoteClientInvoker.java:163) > at org.jboss.remoting.Client.invoke(Client.java:258) > at org.jboss.remoting.Client.invoke(Client.java:221) > at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:55) > at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) > at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61) > at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) > at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:55) > at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) > at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:65) > at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) > at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:102) > at $Proxy1.remove(Unknown Source) > at com.teleglobal.modules.authentic.servcies.AuthenticAccountServiceTest.tearDown(AuthenticAccountServiceTest.java:23) > at junit.framework.TestCase.runBare(TestCase.java:130) > 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 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) > The problem goes away when I turn logging down to WARN. > I noticed that there was a similar bug (HHH-248) which was fixed in version 3.0.2 > This exception really only occured when I used ManyToOne relationship using the referencedColumnName attribute and only when I tried to remove AuthenticAccount . > My entities follow: > @Entity > @Table(name="ACCOUNT") > @SequenceGenerator(name="ACCOUNT_SEQUENCE", sequenceName="ACCOUNT_SEQUENCE") > public class AuthenticAccount implements Serializable > { > @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="ACCOUNT_SEQUENCE") > @Column(name="ACN_ID") > private long id; > @Column(name="ACN_ACCOUNT_NUMBER", unique=true) > private String accountNumber; > // Default values for all authentic test accounts > @Column(name="ACN_BALANCE_1") > private long balance1 = 5000; > @Column(name="ACN_STATUS") > private String status = "O"; > @Column(name="ACN_PRO_ID") > private String proId = "11014"; > @Column(name="ACN_CUR_ID") > private long curId = 826; > @Column(name="ACN_AMT_ID_1") > private long amountId1 = 2; > @Column(name="ACN_AMT_ID_2") > private long amountId2 = 1; > @Column(name="ACN_BALANCE_2") > private long balance2 = 0; > @Column(name="ACN_LAST_BATCH_UPDATE_DATE") > private Date lastBatchUpdateDate; > @Column(name="ACN_LAST_FEP_HOST_TRACE_NBR") > private long lastFepHostTraceNumber = 0; > @Column(name="ACN_LAST_HOST_FEP_TRACE_NBR") > private long lastHostFepTraceNumber = 118; > @Column(name="ACN_BILL_PAYMENT_FLG") > private int billPaymentFlag = 1; > @Column(name="ACN_TRANSFER_FLG") > private int transferFlag = 0; > @Column(name="ACN_FUNCTIONS") > private int functions = 1; > @Column(name="ACN_FEP_HOST_SUM") > private long fepHostSum = 110; > @Column(name="ACN_HOST_FEP_SUM") > private long hostFepSum = 811233; > @OneToOne(mappedBy="account", cascade=CascadeType.ALL, fetch=FetchType.EAGER) > private Card card; > @OneToMany(mappedBy="account", cascade=CascadeType.ALL, fetch=FetchType.EAGER) > @JoinColumn(name="AMS_ACCOUNT_NUM", referencedColumnName="ACN_ACCOUNT_NUMBER", nullable = false, unique = true) > private List<AuthenticAccountMiniStatement> miniStatements; > > public AuthenticAccount() > { > lastBatchUpdateDate = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss a") > .parse("09/06/2005 12:00:00 AM", new ParsePosition(0)); > card = new Card(); > miniStatements = new ArrayList<AuthenticAccountMiniStatement>(); > } > public String getAccountNumber() > { > return accountNumber; > } > public void setAccountNumber(String accountNumber) > { > this.accountNumber = accountNumber; > } > public long getAmountId1() > { > return amountId1; > } > public void setAmountId1(long amountId1) > { > this.amountId1 = amountId1; > } > public long getAmountId2() > { > return amountId2; > } > public void setAmountId2(long amountId2) > { > this.amountId2 = amountId2; > } > public long getBalance1() > { > return balance1; > } > public void setBalance1(long balance1) > { > this.balance1 = balance1; > } > public long getBalance2() > { > return balance2; > } > public void setBalance2(long balance2) > { > this.balance2 = balance2; > } > public int getBillPaymentFlag() > { > return billPaymentFlag; > } > public void setBillPaymentFlag(int billPaymentFlag) > { > this.billPaymentFlag = billPaymentFlag; > } > public long getCurId() > { > return curId; > } > public void setCurId(long curId) > { > this.curId = curId; > } > public long getFepHostSum() > { > return fepHostSum; > } > public void setFepHostSum(long fepHostSum) > { > this.fepHostSum = fepHostSum; > } > public int getFunctions() > { > return functions; > } > public void setFunctions(int functions) > { > this.functions = functions; > } > public long getHostFepSum() > { > return hostFepSum; > } > public void setHostFepSum(long hostFepSum) > { > this.hostFepSum = hostFepSum; > } > public long getId() > { > return id; > } > public void setId(long id) > { > this.id = id; > } > public Date getLastBatchUpdateDate() > { > return lastBatchUpdateDate; > } > public void setLastBatchUpdateDate(Date lastBatchUpdateDate) > { > this.lastBatchUpdateDate = lastBatchUpdateDate; > } > public long getLastFepHostTraceNumber() > { > return lastFepHostTraceNumber; > } > public void setLastFepHostTraceNumber(long lastFepHostTraceNumber) > { > this.lastFepHostTraceNumber = lastFepHostTraceNumber; > } > public long getLastHostFepTraceNumber() > { > return lastHostFepTraceNumber; > } > public void setLastHostFepTraceNumber(long lastHostFepTraceNumber) > { > this.lastHostFepTraceNumber = lastHostFepTraceNumber; > } > public String getProId() > { > return proId; > } > public void setProId(String proId) > { > this.proId = proId; > } > public String getStatus() > { > return status; > } > public void setStatus(String status) > { > this.status = status; > } > public int getTransferFlag() > { > return transferFlag; > } > public void setTransferFlag(int transferFlag) > { > this.transferFlag = transferFlag; > } > public Card getCard() > { > return card; > } > public void setCard(Card card) > { > this.card = card; > } > > public void addMiniStatement(AuthenticAccountMiniStatement miniStatement) > { > miniStatement.setAccount(this); > this.miniStatements.add(miniStatement); > } > > public void removeMiniStatement(AuthenticAccountMiniStatement miniStatement) > { > this.miniStatements.remove(miniStatement); > } > public List<AuthenticAccountMiniStatement> getMiniStatements() > { > return miniStatements; > } > public void setMiniStatements(List<AuthenticAccountMiniStatement> miniStatements) > { > this.miniStatements = miniStatements; > } > } > @Entity > @Table(name = "ACCOUNT_MINI_STATEMENT") > @SequenceGenerator(name="MINI_STATEMENT_SEQUENCE", sequenceName="MINI_STATEMENT_SEQUENCE") > public class AuthenticAccountMiniStatement implements Serializable > { > @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="MINI_STATEMENT_SEQUENCE") > @Column(name="AMS_TXN_SEQ") > private long id; > @Column(name="AMS_TXN_CODE") > private String transactionDescription = "LOAD"; > @Column(name="AMS_TXN_DATE") > private Date transactionDate = new Date(); > @Column(name="AMS_TXN_AMOUNT") > private long transactionAmount = 10; > @Column(name="AMS_TRL_BUSINESS_DATE") > private Date transactionLogBusinessDate = new Date(); > @Column(name="AMS_TRL_ID") > private long transactionLogId = 34610; > @Column(name="AMS_GRP_SEQ") > private long groupSequence = 1; > @ManyToOne(fetch=FetchType.EAGER) > @JoinColumn(name="AMS_ACCOUNT_NUM", referencedColumnName="ACN_ACCOUNT_NUMBER", nullable = false, unique = true) > private AuthenticAccount account; > > public AuthenticAccountMiniStatement() > { > } > > public long getTransactionAmount() > { > return transactionAmount; > } > > public void setTransactionAmount(long transactionAmount) > { > this.transactionAmount = transactionAmount; > } > > public Date getTransactionDate() > { > return transactionDate; > } > > public void setTransactionDate(Date transactionDate) > { > this.transactionDate = transactionDate; > } > > public String getTransactionDescription() > { > return transactionDescription; > } > > public void setTransactionDescription(String transactionDescription) > { > this.transactionDescription = transactionDescription; > } > > public long getGroupSequence() > { > return groupSequence; > } > > public void setGroupSequence(long groupSequence) > { > this.groupSequence = groupSequence; > } > > public long getId() > { > return id; > } > > public void setId(long id) > { > this.id = id; > } > > public Date getTransactionLogBusinessDate() > { > return transactionLogBusinessDate; > } > > public void setTransactionLogBusinessDate(Date transactionLogBusinessDate) > { > this.transactionLogBusinessDate = transactionLogBusinessDate; > } > > public long getTransactionLogId() > { > return transactionLogId; > } > > public void setTransactionLogId(long transactionLogId) > { > this.transactionLogId = transactionLogId; > } > public AuthenticAccount getAccount() > { > return account; > } > public void setAccount(AuthenticAccount account) > { > this.account = account; > } > } > @Entity > @Table(name="CARD") > @SequenceGenerator(name="CARD_SEQUENCE", sequenceName="CARD_SEQUENCE") > public class Card implements Serializable > { > @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="CARD_SEQUENCE") > @Column(name="CRD_ID") > private long id; > @Column(name="CRD_PAN") > private String primaryAccountNumber; > @Column(name="CRD_STATUS_1") > private String status1 = "A"; > @Column(name="CRD_CURRENT_PVV") > private long currentPvv = 0; > @Column(name="CRD_PIN_RETRY_COUNT") > private long pinRetryCount = 0; > @Column(name="CRD_CUSTOM_INDEX_1") > private String customIndex1 = "GC"; > // Default values for all authentic test cards > @Column(name="CRD_CARD_SEQUENCE_NBR") > private long cardSequenceNumber = 0; > @Column(name="CRD_CPD_ID") > private long cpdId = 250; > @Column(name="CRD_LAST_SOURCE") > private String lastSource = "U"; > @Column(name="CRD_FUNCTIONS") > private int functions = 1; > @Column(name="CRD_CURRENT_PIN_OFFSET") > private String currentPinOffset = "0"; > @Column(name="CRD_ISSUE_DATE_1") > private Date issueDate1; > @Column(name="CRD_EXPIRY_DATE_1") > private Date expiryDate1; > @Column(name="CRD_EXPIRY_DATE_2") > private Date expiryDate2; > @Column(name="CRD_STATUS_1_DATE") > private Date status1Date; > @ManyToOne(fetch=FetchType.EAGER) > @JoinColumn(name="CRD_PRIMARY_ACN_ID", nullable=false, unique=true) > private AuthenticAccount account; > public Card() > { > this.issueDate1 = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss a").parse("09/06/2005 12:00:00 AM", new ParsePosition(0)); > this.expiryDate1 = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss a").parse("01/06/2015 12:00:00 AM", new ParsePosition(0)); > this.expiryDate2 = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss a").parse("01/06/2015 12:00:00 AM", new ParsePosition(0)); > this.status1Date = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss a").parse("09/06/2005 12:00:00 AM", new ParsePosition(0)); > } > public String getPrimaryAccountNumber() > { > return primaryAccountNumber; > } > public void setPrimaryAccountNumber(String primaryAccountNumber) > { > this.primaryAccountNumber = primaryAccountNumber; > } > public long getCpdId() > { > return cpdId; > } > public void setCpdId(long cpdId) > { > this.cpdId = cpdId; > } > public String getCurrentPinOffset() > { > return currentPinOffset; > } > public void setCurrentPinOffset(String currentPinOffset) > { > this.currentPinOffset = currentPinOffset; > } > public long getCurrentPvv() > { > return currentPvv; > } > public void setCurrentPvv(long currentPvv) > { > this.currentPvv = currentPvv; > } > public String getCustomIndex1() > { > return customIndex1; > } > public void setCustomIndex1(String customIndex1) > { > this.customIndex1 = customIndex1; > } > public Date getExpiryDate1() > { > return expiryDate1; > } > public void setExpiryDate1(Date expiryDate1) > { > this.expiryDate1 = expiryDate1; > } > public Date getExpiryDate2() > { > return expiryDate2; > } > public void setExpiryDate2(Date expiryDate2) > { > this.expiryDate2 = expiryDate2; > } > public int getFunctions() > { > return functions; > } > public void setFunctions(int functions) > { > this.functions = functions; > } > public long getId() > { > return id; > } > public void setId(long id) > { > this.id = id; > } > public Date getIssueDate1() > { > return issueDate1; > } > public void setIssueDate1(Date issueDate1) > { > this.issueDate1 = issueDate1; > } > public String getLastSource() > { > return lastSource; > } > public void setLastSource(String lastSource) > { > this.lastSource = lastSource; > } > public long getPinRetryCount() > { > return pinRetryCount; > } > public void setPinRetryCount(long pinRetryCount) > { > this.pinRetryCount = pinRetryCount; > } > public long getCardSequenceNumber() > { > return cardSequenceNumber; > } > public void setCardSequenceNumber(long cardSequenceNumber) > { > this.cardSequenceNumber = cardSequenceNumber; > } > public String getStatus1() > { > return status1; > } > public void setStatus1(String status1) > { > this.status1 = status1; > } > public Date getStatus1Date() > { > return status1Date; > } > public void setStatus1Date(Date status1Date) > { > this.status1Date = status1Date; > } > public AuthenticAccount getAccount() > { > return account; > } > public void setAccount(AuthenticAccount account) > { > this.account = account; > } > } > Further more, when I try to remove an AUthentic entity (with logging set to WARN), I find that the AuthenticMiniStatements > are not removed. This probably should be raised as another bug. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |