private IDictionary <string, object> originalId(PersistentCollectionChangeData persistentCollectionChangeData) { return((IDictionary <string, object>)persistentCollectionChangeData.Data[VerCfg.AuditEntCfg.OriginalIdPropName]); }
public void PerformCollectionChange(ISession session, string entityName, string propertyName, AuditConfiguration auditCfg, PersistentCollectionChangeData persistentCollectionChangeData, object revision) { var qb = new QueryBuilder(persistentCollectionChangeData.EntityName, QueryConstants.MiddleEntityAlias); var originalIdPropName = _auditConfiguration.AuditEntCfg.OriginalIdPropName; var originalId = (IDictionary)persistentCollectionChangeData.Data[originalIdPropName]; var revisionFieldName = auditCfg.AuditEntCfg.RevisionFieldName; var revisionTypePropName = auditCfg.AuditEntCfg.RevisionTypePropName; // Adding a parameter for each id component, except the rev number and type. foreach (DictionaryEntry originalIdKeyValue in originalId) { if (!revisionFieldName.Equals(originalIdKeyValue.Key) && !revisionTypePropName.Equals(originalIdKeyValue.Key)) { qb.RootParameters.AddWhereWithParam(originalIdPropName + "." + originalIdKeyValue.Key, true, "=", originalIdKeyValue.Value); } } var sessionFactory = ((ISessionImplementor)session).Factory; var propertyType = sessionFactory.GetEntityPersister(entityName).GetPropertyType(propertyName); if (propertyType.IsCollectionType) { var collectionPropertyType = (CollectionType)propertyType; // Handling collection of components. if (collectionPropertyType.GetElementType(sessionFactory) is ComponentType) { // Adding restrictions to compare data outside of primary key. // todo: is it necessary that non-primary key attributes be compared? foreach (var dataEntry in persistentCollectionChangeData.Data) { if (!originalIdPropName.Equals(dataEntry.Key)) { if (dataEntry.Value != null) { qb.RootParameters.AddWhereWithParam(dataEntry.Key, true, "=", dataEntry.Value); } else { qb.RootParameters.AddNullRestriction(dataEntry.Key, true); } } } } } addEndRevisionNullRestriction(_auditConfiguration, qb); var l = qb.ToQuery(session).SetLockMode(QueryConstants.MiddleEntityAlias, LockMode.Upgrade).List(); if (l.Count > 0) { updateLastRevision(session, _auditConfiguration, l, originalId, persistentCollectionChangeData.EntityName, revision, true); } // Save the audit data var data = persistentCollectionChangeData.Data; session.Save(persistentCollectionChangeData.EntityName, data); SessionCacheCleaner.ScheduleAuditDataRemoval(session, data); }
public void PerformCollectionChange(ISession session, string entityName, string propertyName, AuditConfiguration auditCfg, PersistentCollectionChangeData persistentCollectionChangeData, object revision) { var data = persistentCollectionChangeData.Data; session.Save(persistentCollectionChangeData.EntityName, data); SessionCacheCleaner.ScheduleAuditDataRemoval(session, data); }
private Object getOriginalId(PersistentCollectionChangeData persistentCollectionChangeData) { return(persistentCollectionChangeData.getData()[verCfg.AuditEntCfg.OriginalIdPropName]); }