-1

In our project we are facing exceptions with stack trace below. It happens sometimes during object merge (I can't reproduce it). I don't exactly know which object causes this error because lot of cascades. Environment does not matter, it occurs both in production and development environment.

We use Hibernate 4.2.5.Final, Spring 3.2.2.RELEASE, Java 7, Tomcat 7.

java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.util.Date
at org.hibernate.type.descriptor.java.JdbcTimestampTypeDescriptor.areEqual(JdbcTimestampTypeDescriptor.java:41)
at org.hibernate.type.AbstractStandardBasicType.isEqual(AbstractStandardBasicType.java:205)
at org.hibernate.type.AbstractStandardBasicType.isSame(AbstractStandardBasicType.java:195)
at org.hibernate.type.AbstractStandardBasicType.isDirty(AbstractStandardBasicType.java:231)
at org.hibernate.type.AbstractStandardBasicType.isDirty(AbstractStandardBasicType.java:227)
at org.hibernate.type.TypeHelper.findDirty(TypeHelper.java:294)
at org.hibernate.persister.entity.AbstractEntityPersister.findDirty(AbstractEntityPersister.java:4037)
at org.hibernate.event.internal.DefaultFlushEntityEventListener.dirtyCheck(DefaultFlushEntityEventListener.java:527)
at org.hibernate.event.internal.DefaultFlushEntityEventListener.isUpdateNecessary(DefaultFlushEntityEventListener.java:234)
at org.hibernate.event.internal.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:163)
at org.hibernate.event.internal.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:228)
at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:100)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1234)
at org.springframework.orm.hibernate4.SpringSessionSynchronization.beforeCommit(SpringSessionSynchronization.java:91)
at org.springframework.transaction.support.TransactionSynchronizationUtils.triggerBeforeCommit(TransactionSynchronizationUtils.java:95)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:925)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:738)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:724)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:475)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:270)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at com.sun.proxy.$Proxy115.method(Unknown Source)
at com.some.package.OurClass.method(OurClass.java:114)

Edit: method "com.some.package.OurClass.method" just did Hibernate merge() operation.

2
  • You need to provide code to demonstrate where this is happening before definitive answer can be given. Commented Jun 1, 2014 at 11:34
  • You need to provide at least code for com.some.package.OurClass.method(OurClass.java:114) and probably, depending on the entities involved, source code for your Hibernate entities. Commented Jun 1, 2014 at 12:04

1 Answer 1

1

I looked at it once more and I found the reason. We have field in our domain object with name "created" (of type date) and transient method isCreated. Methods look like this:

@Column(...)
public Date getCreated() {
    return created;
}

@Transient
public boolean isCreated() {
    return isStatus(StatusType.CREATED);
}

I solved it with renaming the method isCreated to isCreatedStatus().

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.