HHH-13945: fallback to call map if exception thrown
This commit is contained in:
parent
a975fbf5d4
commit
2228bd238e
|
@ -21,6 +21,8 @@ import org.hibernate.envers.internal.tools.query.Parameters;
|
||||||
import org.hibernate.persister.entity.EntityPersister;
|
import org.hibernate.persister.entity.EntityPersister;
|
||||||
import org.hibernate.proxy.HibernateProxy;
|
import org.hibernate.proxy.HibernateProxy;
|
||||||
|
|
||||||
|
import javax.persistence.PersistenceException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Adam Warski (adam at warski dot org)
|
* @author Adam Warski (adam at warski dot org)
|
||||||
* @author HernпїЅn Chanfreau
|
* @author HernпїЅn Chanfreau
|
||||||
|
@ -58,8 +60,16 @@ public class ToOneIdMapper extends AbstractToOneMapper {
|
||||||
// bi-directional relation, we always store the "old", unchanged data, to prevent storing changes made
|
// bi-directional relation, we always store the "old", unchanged data, to prevent storing changes made
|
||||||
// to this field. It is the responsibility of the collection to properly update it if it really changed.
|
// to this field. It is the responsibility of the collection to properly update it if it really changed.
|
||||||
Object entity = nonInsertableFake ? oldObj : newObj;
|
Object entity = nonInsertableFake ? oldObj : newObj;
|
||||||
|
|
||||||
|
// fix HHH-13760 - try to aggressively un-proxy this entity to help get the correct type of data later
|
||||||
|
// in mapToMapFromEntity. But it might fail while getImplementation() if object is deleted or other reasons.
|
||||||
|
// We catch the exception and fallback to call mapToMapFromEntity directly with the HibernateProxy entity
|
||||||
if ( lazyMapping && entity instanceof HibernateProxy ) {
|
if ( lazyMapping && entity instanceof HibernateProxy ) {
|
||||||
entity = ( (HibernateProxy) entity ).getHibernateLazyInitializer().getImplementation();
|
try {
|
||||||
|
entity = ((HibernateProxy) entity).getHibernateLazyInitializer().getImplementation();
|
||||||
|
} catch ( PersistenceException e ) {
|
||||||
|
// Ignore the exception and fallback to call mapToMapFromEntity directly
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
delegate.mapToMapFromEntity( newData, entity );
|
delegate.mapToMapFromEntity( newData, entity );
|
||||||
|
|
Loading…
Reference in New Issue