Browse Source

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

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

26
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,8 +97,15 @@ 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) {
// removeChangeSetValues((DocumentBacked)entity);
// }
// return proceed(em, entity);
// }
private static void removeChangeSetValues(DocumentBacked entity) {
LOGGER.debug("Removing all change-set values for " + entity);
ChangeSet nulledCs = new HashMapChangeSet(); ChangeSet nulledCs = new HashMapChangeSet();
DocumentBacked documentEntity = (DocumentBacked) entity; DocumentBacked documentEntity = (DocumentBacked) entity;
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@ -111,12 +118,10 @@ public aspect MongoDocumentBacking {
} }
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