|
|
|
In mapping XML, at the time of resolving a property name to a field or getter/setter method Hibernate does not yet know the type. So if the class defines multiple potential matches based solely on name, Hibernate will not be able to adequately decide between them. At the moment it just picks the first one it sees. Unfortunately different JVMs (even different versions from the same VM vendor) returns the methods in different orders.
So if we (for example) match a property named {{active}} to a getter method named {{isActive}}, check that there is also not a method named {{getActive}} of differing type. If we do find such a {{getActive}} method, throw the MappingException.
----
h4. Original Description
It is the same bug as [HHH-10093|https://hibernate.atlassian.net/browse/HHH-10093], but for version 5.0.2. There you can find more information.
Under Java 6 this does not happen, the exception is thrown when I use Java 8 (currently update 60).
After I do a simple session.get(Class, Serializable) , when I call Transaction.commit():
It reads all the properties in the xml order without problems. After it reads the last property, the call with the issue is made.
So, in DefaultFlushEntityEventListener line 135
{code:java} final Object[] values = getValues(...); {code}
works fine.
The issue appear on line 142 {code:java} if ( isUpdateNecessary( event, mightBeDirty ) ) { {code}
*The owner object is of class Boolean with value false, instead of being an Articulo class.*
{panel:title=Exception}
{code:java} org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of datos.Articulo.nroArticulo at org.hibernate.property.access.spi.GetterMethodImpl.get(GetterMethodImpl.java:64) at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:223) at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:4599) at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:4311) at org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:226) at org.hibernate.engine.internal.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:276) at org.hibernate.type.EntityType.getIdentifier(EntityType.java:455) at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:281) at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:291) at org.hibernate.type.TypeHelper.findDirty(TypeHelper.java:296) at org.hibernate.persister.entity.AbstractEntityPersister.findDirty(AbstractEntityPersister.java:4079) at org.hibernate.event.internal.DefaultFlushEntityEventListener.dirtyCheck(DefaultFlushEntityEventListener.java:532) at org.hibernate.event.internal.DefaultFlushEntityEventListener.isUpdateNecessary(DefaultFlushEntityEventListener.java:215) at org.hibernate.event.internal.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:142) at org.hibernate.event.internal.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:216) at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:85) at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:38) at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1224) at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:464) at org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:2894) at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2270) at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:485) at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:146) at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$100(JdbcResourceLocalTransactionCoordinatorImpl.java:38) at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:230) at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:65) {code} {panel}
|
|
|
|