6

I am facing issue with Hibernate.

Using Hibernate 3.2.6 and JDK 1.7.0_21

Is this issue coming due to JDK compatibility with Hibernate version?

This issue is random. I still unable to find steps to reproduce.

2014-07-14 06:09:10,661 [DEBUG] EventExpenseAreaService.getEventSummary:654 - Revenue Value (Hari) --> 1166.15
2014-07-14 06:09:18,665 [ERROR] EventSetupService.getEventById:1451 - java.lang.Boolean cannot be cast to java.lang.String
java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String
    at org.hibernate.type.StringType.toString(StringType.java:44)
    at org.hibernate.type.NullableType.nullSafeToString(NullableType.java:93)
    at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:140)
    at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:107)
    at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2002)
    at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2376)
    at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2312)
    at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2612)
    at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:96)
    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:168)
    at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
    at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
    at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
    at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
    at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
    at com.sibisoft.northstar.events.service.EventSetupService.getEventById(EventSetupService.java:1441)
    at com.sibisoft.northstar.events.struts.EventAction.load(EventAction.java:1037)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

Code getEventById

public EventDTO getEventById(Integer eventId,boolean logActivity, Session session)throws Exception {

    EventDTO event = null;
    Transaction transaction = null;
    try {

        if (session == null) {
            session = HibernateSessionFactory.getSession();
            if(logActivity){
                transaction = session.beginTransaction();
            }
        }

        event = (EventDTO) super.getByPrimaryKey(EventDTO.class, eventId,session);


        if(transaction!=null){
            transaction.commit();
        }

    } catch (HibernateException e) {
        LOGGER.error(e.getMessage(), e);
        if(transaction!=null){
            transaction.rollback();
        }
        throw e;
    }catch (Exception e) {
        LOGGER.error(e.getMessage(), e);
        if(transaction!=null){
            transaction.rollback();
        }
        throw e;
    }

    return event;

}

Method : getByPrimaryKey

protected BaseEventDTO getByPrimaryKey(Class clazz, Integer pk,Session session) throws Exception{

    BaseEventDTO dto = null;
    Transaction tx = null;

    try {

        if (session == null)  {
            session = HibernateSessionFactory.getSession();
        }
        dto = (BaseEventDTO) session.get(clazz, pk);
        return dto;

    }
    catch(Exception e){
        LOGGER.error(e);
        if (tx !=null) {
            tx.rollback();
        }
        throw e;
    }
}
2
  • show your code of : com.sibisoft.northstar.events.service.EventSetupService.getEventById() Commented Jul 15, 2014 at 4:43
  • See code, I have add code in my question Commented Jul 15, 2014 at 4:49

1 Answer 1

12

JDK 7 have changed Class.getDeclaredMethods() so the order is not guaranteed. [click here]

You might have a property in Object mapping that have getter method String getProperty() as well as Boolean isPropery() that is causing problem intermittently.

Hibernate 3 BasicPropertyAccessor.getterMethod(...) some time finds getProperty() and some time isProperty() due to unspecified ordering in JDK 7 by getDeclaredMethods(). which confuses hibernate and it invokes Boolean Type method for String type property.

You need to rename one method to get expected results.

Similar question on Hibernate Forum: https://forum.hibernate.org/viewtopic.php?p=2474641

Sign up to request clarification or add additional context in comments.

Comments

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.