DATADOC-48 moved clearing change-set values to postRemove lifecycle
This commit is contained in:
@@ -82,10 +82,10 @@ public aspect MongoDocumentBacking {
|
|||||||
args(entity);
|
args(entity);
|
||||||
|
|
||||||
// intercept EntityManager.remove calls
|
// intercept EntityManager.remove calls
|
||||||
public pointcut entityManagerRemove(EntityManager em, Object entity) :
|
// public pointcut entityManagerRemove(EntityManager em, Object entity) :
|
||||||
call(* EntityManager.remove(Object)) &&
|
// call(* EntityManager.remove(Object)) &&
|
||||||
target(em) &&
|
// target(em) &&
|
||||||
args(entity);
|
// args(entity);
|
||||||
|
|
||||||
// move changeSet from detached entity to the newly merged persistent object
|
// move changeSet from detached entity to the newly merged persistent object
|
||||||
Object around(EntityManager em, Object entity) : entityManagerMerge(em, entity) {
|
Object around(EntityManager em, Object entity) : entityManagerMerge(em, entity) {
|
||||||
@@ -97,26 +97,31 @@ public aspect MongoDocumentBacking {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// clear changeSet from removed entity
|
// clear changeSet from removed entity
|
||||||
Object around(EntityManager em, Object entity) : entityManagerRemove(em, entity) {
|
// Object around(EntityManager em, Object entity) : entityManagerRemove(em, entity) {
|
||||||
if (entity instanceof DocumentBacked) {
|
// if (entity instanceof DocumentBacked) {
|
||||||
ChangeSet nulledCs = new HashMapChangeSet();
|
// removeChangeSetValues((DocumentBacked)entity);
|
||||||
DocumentBacked documentEntity = (DocumentBacked) entity;
|
// }
|
||||||
@SuppressWarnings("unchecked")
|
// return proceed(em, entity);
|
||||||
ChangeSetPersister<Object> changeSetPersister = (ChangeSetPersister<Object>)documentEntity.itdChangeSetPersister;
|
// }
|
||||||
try {
|
|
||||||
|
private static void removeChangeSetValues(DocumentBacked entity) {
|
||||||
|
LOGGER.debug("Removing all change-set values for " + entity);
|
||||||
|
ChangeSet nulledCs = new HashMapChangeSet();
|
||||||
|
DocumentBacked documentEntity = (DocumentBacked) entity;
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
ChangeSetPersister<Object> changeSetPersister = (ChangeSetPersister<Object>)documentEntity.itdChangeSetPersister;
|
||||||
|
try {
|
||||||
changeSetPersister.getPersistentState(
|
changeSetPersister.getPersistentState(
|
||||||
documentEntity.getClass(),
|
documentEntity.getClass(),
|
||||||
documentEntity.get_persistent_id(),
|
documentEntity.get_persistent_id(),
|
||||||
documentEntity.getChangeSet());
|
documentEntity.getChangeSet());
|
||||||
}
|
}
|
||||||
catch (DataAccessException e) {}
|
catch (DataAccessException e) {}
|
||||||
catch (NotFoundException e) {}
|
catch (NotFoundException e) {}
|
||||||
for (String key : ((DocumentBacked)entity).getChangeSet().getValues().keySet()) {
|
for (String key :entity.getChangeSet().getValues().keySet()) {
|
||||||
nulledCs.set(key, null);
|
nulledCs.set(key, null);
|
||||||
}
|
}
|
||||||
((DocumentBacked)entity).setChangeSet(nulledCs);
|
entity.setChangeSet(nulledCs);
|
||||||
}
|
|
||||||
return proceed(em, entity);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
before(DocumentBacked entity) : arbitraryUserConstructorOfChangeSetBackedObject(entity) {
|
before(DocumentBacked entity) : arbitraryUserConstructorOfChangeSetBackedObject(entity) {
|
||||||
@@ -204,6 +209,7 @@ public aspect MongoDocumentBacking {
|
|||||||
LOGGER.debug("JPA lifecycle event PostRemove: " + this.getClass().getName() + " :: " + this);
|
LOGGER.debug("JPA lifecycle event PostRemove: " + this.getClass().getName() + " :: " + this);
|
||||||
}
|
}
|
||||||
registerTransactionSynchronization(this);
|
registerTransactionSynchronization(this);
|
||||||
|
removeChangeSetValues(this);
|
||||||
}
|
}
|
||||||
@javax.persistence.PostLoad public void DocumentBacked.itdPostLoad() {
|
@javax.persistence.PostLoad public void DocumentBacked.itdPostLoad() {
|
||||||
if (LOGGER.isDebugEnabled()) {
|
if (LOGGER.isDebugEnabled()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user