Browse Source

DATADOC-48 moved clearing change-set values to postRemove lifecycle

pull/1/head
Thomas Risberg 15 years ago
parent
commit
76b9922e35
  1. 44
      spring-data-mongodb-cross-store/src/main/java/org/springframework/data/persistence/document/mongo/MongoDocumentBacking.aj

44
spring-data-mongodb-cross-store/src/main/java/org/springframework/data/persistence/document/mongo/MongoDocumentBacking.aj

@ -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()) {

Loading…
Cancel
Save