Hibernate version: 3.3.1
We're trying to upgrade from 3.2 to 3.3.1.
Hibernate has changed from CGLib to Javassist for the proxying stuff.
Unfortunately, when I try to access the identifier method of the proxy (which used to work under CGLib) I get a LazyInitException.
We have upgraded the version of Javassist on our CP to the one that came with Hibernate, and removed CGLib from the CP (logs say HB is using javassist).
I tried swapping back to CGLib under HB 3.3.1, but Spring 2.5.6 doesn't seem to want to work on the new "cglib-repack" jar that now comes with HB 3.3.1.
The exception we get is provided below; but before I go off and try to make a smaller, reproducible test case - I just wanted to ask if anyone else knows about/has run into this problem?
This is what our custom to string style does that is causing the problem:
Code:
@Override
protected void appendInternal(
StringBuffer buffer, String fieldName, Object value, boolean detail)
{
if (Hibernate.isInitialized(value)) {
super.appendInternal(buffer, fieldName, value, detail);
return;
}
if( value instanceof PersistentEntity ){
buffer.append("{proxy.id}=").
append(((PersistentEntity) value).getId());
}
else {
buffer.append("{proxied object}");
}
}
I'm guessing if I really need to to, I can start doing some cast-based shennanigans and then call AbstractLazyInitializer.getIdentifier(), but I thought I'd ask if I was Doing It Wrong first.
Cheers,
Shorn.
(btw, the 3.3.1 doco needs updating to specify the "hibernate.bytecode.provider" property, want a JIRA?)
---- 8< ---- Stacktrace ---- 8< ----
Code:
Caused by: org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:86)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:140)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)
at gekko.domain.user.User_$$_javassist_188.getId(User_$$_javassist_188.java)
at gekko.util.builder.GekkoToStringStyle.appendInternal(GekkoToStringStyle.java:63)
at org.apache.commons.lang.builder.ToStringStyle.append(ToStringStyle.java:395)
at org.apache.commons.lang.builder.ToStringBuilder.append(ToStringBuilder.java:840)
at org.apache.commons.lang.builder.ReflectionToStringBuilder.appendFieldsIn(ReflectionToStringBuilder.java:605)
at org.apache.commons.lang.builder.ReflectionToStringBuilder.toString(ReflectionToStringBuilder.java:761)
at gekko.util.builder.GekkoToStringBuilder.toString(GekkoToStringBuilder.java:30)
at gekko.util.converter.PersistentEntityConverter.toString(PersistentEntityConverter.java:14)
at gekko.util.builder.GekkoToStringStyle.appendDetail(GekkoToStringStyle.java:31)
at org.apache.commons.lang.builder.ToStringStyle.appendInternal(ToStringStyle.java:509)
at gekko.util.builder.GekkoToStringStyle.appendInternal(GekkoToStringStyle.java:58)
at org.apache.commons.lang.builder.ToStringStyle.append(ToStringStyle.java:395)
at org.apache.commons.lang.builder.ToStringBuilder.append(ToStringBuilder.java:840)
at org.apache.commons.lang.builder.ReflectionToStringBuilder.appendFieldsIn(ReflectionToStringBuilder.java:605)
at org.apache.commons.lang.builder.ReflectionToStringBuilder.toString(ReflectionToStringBuilder.java:758)
at gekko.util.builder.GekkoToStringBuilder.toString(GekkoToStringBuilder.java:30)
at gekko.util.converter.PersistentEntityConverter.toString(PersistentEntityConverter.java:14)
at gekko.util.builder.GekkoToStringStyle.appendDetail(GekkoToStringStyle.java:31)
at org.apache.commons.lang.builder.ToStringStyle.appendInternal(ToStringStyle.java:509)
at gekko.util.builder.GekkoToStringStyle.appendInternal(GekkoToStringStyle.java:58)
at org.apache.commons.lang.builder.ToStringStyle.append(ToStringStyle.java:395)
at org.apache.commons.lang.builder.ToStringBuilder.append(ToStringBuilder.java:840)
at org.apache.commons.lang.builder.ReflectionToStringBuilder.appendFieldsIn(ReflectionToStringBuilder.java:605)
at org.apache.commons.lang.builder.ReflectionToStringBuilder.toString(ReflectionToStringBuilder.java:758)
at gekko.util.builder.GekkoToStringBuilder.toString(GekkoToStringBuilder.java:30)
at gekko.util.converter.PersistentEntityConverter.toString(PersistentEntityConverter.java:14)
at gekko.util.FormatUtils.formatObject(FormatUtils.java:187)
at gekko.util.CollectionUtils.collectionToString(CollectionUtils.java:218)
at gekko.util.CollectionUtils.collectionToString(CollectionUtils.java:232)
at gekko.util.CollectionUtils.collectionToString(CollectionUtils.java:254)
at gekko.util.FormatUtils.formatCollection(FormatUtils.java:303)
at gekko.util.converter.CollectionConverter.toString(CollectionConverter.java:22)
at gekko.util.builder.GekkoToStringStyle.appendDetail(GekkoToStringStyle.java:45)
at org.apache.commons.lang.builder.ToStringStyle.appendInternal(ToStringStyle.java:432)
at gekko.util.builder.GekkoToStringStyle.appendInternal(GekkoToStringStyle.java:58)
at org.apache.commons.lang.builder.ToStringStyle.append(ToStringStyle.java:395)
at org.apache.commons.lang.builder.ToStringBuilder.append(ToStringBuilder.java:840)
at org.apache.commons.lang.builder.ReflectionToStringBuilder.appendFieldsIn(ReflectionToStringBuilder.java:605)
at org.apache.commons.lang.builder.ReflectionToStringBuilder.toString(ReflectionToStringBuilder.java:758)
at gekko.util.builder.GekkoToStringBuilder.toString(GekkoToStringBuilder.java:30)
at gekko.util.converter.PersistentEntityConverter.toString(PersistentEntityConverter.java:14)
at gekko.util.FormatUtils.formatObject(FormatUtils.java:187)
at gekko.domain.AbstractPersistentEntity.toString(AbstractPersistentEntity.java:61)
at java.util.Formatter$FormatSpecifier.printString(Formatter.java:2793)
at java.util.Formatter$FormatSpecifier.print(Formatter.java:2676)
at java.util.Formatter.format(Formatter.java:2432)
at java.util.Formatter.format(Formatter.java:2366)
at java.lang.String.format(String.java:2770)
at gekko.persistence.hibernate.GekkoEventListener.validateChangeCertificate(GekkoEventListener.java:180)
at gekko.persistence.hibernate.GekkoEventListener.handleUnauthPersistentEntity(GekkoEventListener.java:134)
at gekko.persistence.hibernate.GekkoEventListener.onPreUpdate(GekkoEventListener.java:65)
at org.hibernate.action.EntityUpdateAction.preUpdate(EntityUpdateAction.java:237)
at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:88)
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:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54)
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:456)
... 36 more