Hi Eric,
There was already opened HHH-7158 for this issue.
regards
Günther Demetz
-----Original Message-----
From: hibernate-dev-bounces(a)lists.jboss.org [mailto:hibernate-dev-bounces@lists.jboss.org]
On Behalf Of Eric Dalquist
Sent: Sunday, March 11, 2012 5:38 AM
To: hibernate-dev(a)lists.jboss.org
Subject: [hibernate-dev] NaturalIdXrefDelegate key comparison issue
I haven't spent a ton of time looking into this yet but while trying to update uPortal
to use naturalIds in 4.1.1 I think I ran into a bug in:
NaturalIdXrefDelegate$NaturalIdResolutionCache.areSame(Object[], Object[])
That code uses Type.compare(Object x, Object y) to compare each pair of fields in the two
naturalIds.
I have an entity that has a field of type Class which ends up using the
org.hibernate.type.ClassType.
ClassType relies on parent class AbstractStandardBasicType to implement the compare
method.
AbstractStandardBasicType uses the JavaTypeDescriptor.getComparator()
method to get the comparator to use.
For ClassType the JavaTypeDescriptor is
org.hibernate.type.descriptor.java.ClassTypeDescriptor which never sets a comparator so
JavaTypeDescriptor.getComparator() returns null resulting in the following NPE:
Caused by: java.lang.NullPointerException
at
org.hibernate.type.AbstractStandardBasicType.compare(AbstractStandardBasicType.java:210)
at
org.hibernate.engine.internal.NaturalIdXrefDelegate$NaturalIdResolutionCache.areSame(NaturalIdXrefDelegate.java:353)
at
org.hibernate.engine.internal.NaturalIdXrefDelegate$NaturalIdResolutionCache.cache(NaturalIdXrefDelegate.java:338)
at
org.hibernate.engine.internal.NaturalIdXrefDelegate.cacheNaturalIdResolution(NaturalIdXrefDelegate.java:78)
at
org.hibernate.engine.internal.StatefulPersistenceContext.entityStateUpdatedNotification(StatefulPersistenceContext.java:1732)
at
org.hibernate.engine.spi.EntityEntry.notifyLoadedStateUpdated(EntityEntry.java:382)
at
org.hibernate.engine.spi.EntityEntry.postUpdate(EntityEntry.java:244)
at
org.hibernate.action.internal.EntityUpdateAction.execute(EntityUpdateAction.java:152)
at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:362)
at
org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:354)
at
org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:276)
at
org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:326)
at
org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:52)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1127)
at
org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:325)
at
org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
at
org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:175)
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:73)
I likely won't have time to try and reproduce this in a hibernate unit test until
Monday or Tuesday, I'm hoping someone might have a quick insight.
-Eric
_______________________________________________
hibernate-dev mailing list
hibernate-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev