List of usage examples for org.hibernate.event.spi MergeEvent getResult
public Object getResult()
From source file:it.cilea.core.spring.dao.hibernate.IdTransferringMergeEventListener.java
License:Apache License
/** * Hibernate 3.1 implementation of ID transferral. *//*from w w w.j a va 2 s.co m*/ @Override protected void entityIsTransient(MergeEvent event, Map copyCache) { super.entityIsTransient(event, copyCache); SessionImplementor session = event.getSession(); EntityPersister persister = session.getEntityPersister(event.getEntityName(), event.getEntity()); // Extract id from merged copy (which is currently registered with // Session). Serializable id = persister.getIdentifier(event.getResult(), session); // Set id on original object (which remains detached). persister.setIdentifier(event.getOriginal(), id, session); }
From source file:org.babyfish.hibernate.event.ObjectModelMergeEventListener.java
License:Open Source License
protected void afterMerge(MergeEvent event) { Object original = event.getOriginal(); Object result = event.getResult(); //Merged transient or detached object with ObjectModel. if (original != result && Metadatas.has(original.getClass())) { JPAObjectModelMetadata objectModelMetadata = JPAMetadatas.of(original.getClass()); ObjectModel objectModel = (ObjectModel) objectModelMetadata.getFactory().get(original); for (AssociationProperty associationProperty : objectModelMetadata.getAssociationProperties() .values()) {//from ww w. j a v a 2 s . co m AssociationProperty oppositeProperty = associationProperty.getOppositeProperty(); if (oppositeProperty == null || !oppositeProperty.isReference()) { continue; } AssociatedEndpoint<?, ?> associatedEndpoint = objectModel .getAssociation(associationProperty.getId()); if (associatedEndpoint.isDisabled() || !associatedEndpoint.isLoaded()) { continue; } ObjectModelFactory<?> elementObjectModelFactory = oppositeProperty.getDeclaringObjectModelMetadata() .getFactory(); int oppositePropertyId = oppositeProperty.getId(); if (associatedEndpoint instanceof Collection<?>) { for (Object o : (Collection<?>) associatedEndpoint) { if (o != null) { ObjectModel elementObjectModel = (ObjectModel) elementObjectModelFactory.get(o); replaceBackReferenceToResult(event, elementObjectModel.getAssociation(oppositePropertyId)); } } } else if (associatedEndpoint instanceof Map<?, ?>) { for (Object o : ((Map<?, ?>) associatedEndpoint).values()) { if (o != null) { ObjectModel elementObjectModel = (ObjectModel) elementObjectModelFactory.get(o); replaceBackReferenceToResult(event, elementObjectModel.getAssociation(oppositePropertyId)); } } } else { Object o = ((Reference<?>) associatedEndpoint).get(); if (o != null) { ObjectModel elementObjectModel = (ObjectModel) elementObjectModelFactory.get(o); replaceBackReferenceToResult(event, elementObjectModel.getAssociation(oppositePropertyId)); } } } } }
From source file:org.babyfish.hibernate.event.ObjectModelMergeEventListener.java
License:Open Source License
private static void replaceBackReferenceToResult(MergeEvent event, AssociatedEndpoint<?, ?> backEndpoint) { if (backEndpoint.isDisabled() || !backEndpoint.isLoaded()) { return;//from w w w . jav a 2 s. c om } Reference<?> reference = (Reference<?>) backEndpoint; if (reference.get(true) == event.getResult()) { return; } Method hibernateSetMethod; if (backEndpoint instanceof EntityKeyedReference<?, ?, ?>) { hibernateSetMethod = ENTITY_KEYED_REFERENCE_HIBERNATE_SET; } else if (backEndpoint instanceof EntityIndexedReference<?, ?>) { hibernateSetMethod = ENTITY_INDEXED_REFERENCE_HIBERNATE_SET; } else { hibernateSetMethod = ENTITY_REFERENCE_HIBERNATE_SET; } try { hibernateSetMethod.invoke(backEndpoint, event.getResult()); } catch (IllegalAccessException ex) { throw new AssertionError("Internal bug", ex); } catch (InvocationTargetException ex) { UncheckedException.rethrow(ex.getTargetException()); } }