Hi Eric,

There was already opened HHH-7158 for this issue.

regards
Günther Demetz

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

_______________________________________________
hibernate-dev mailing list
hibernate-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev

Reply via email to