[hibernate-dev] NaturalIdXrefDelegate key comparison issue

Demetz, Guenther Guenther.Demetz at wuerth-phoenix.com
Mon Mar 12 03:57:16 EDT 2012


Hi Eric,

There was already opened HHH-7158 for this issue.

regards
Günther Demetz

-----Original Message-----
From: hibernate-dev-bounces at lists.jboss.org [mailto:hibernate-dev-bounces at lists.jboss.org] On Behalf Of Eric Dalquist
Sent: Sunday, March 11, 2012 5:38 AM
To: hibernate-dev at 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 at lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev




More information about the hibernate-dev mailing list