Hibernate issue java.lang.Boolean cannot be cast to java.lang.String Using JDK 1.7
hibernate, java, java-6, java-7
Solution
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
Problem
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; } } ```