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