Skip to content

Commit 123087c

Browse files
committed
#16 fully fixed. Now ComponentAsIdGetAudit green.
1 parent fd9d1ec commit 123087c

File tree

3 files changed

+51
-13
lines changed

3 files changed

+51
-13
lines changed

Src/NHibernate.Envers/Configuration/Metadata/AuditMetadataGenerator.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,8 @@ public void GenerateSecondPass(PersistentClass pc, ClassAuditingData auditingDat
493493
// Mapping unjoined properties
494494
var parent = xmlMappingData.ClassMapping;
495495

496+
idMetadataGenerator.GenerateSecondPass(entityName, pc);
497+
496498
addProperties(parent, pc.UnjoinedPropertyIterator,
497499
propertyMapper, auditingData, entityName, xmlMappingData, false);
498500

Src/NHibernate.Envers/Configuration/Metadata/IdMetadataGenerator.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,5 +113,37 @@ private static PropertyAuditingData getIdPersistentPropertyAuditingData(Property
113113
{
114114
return new PropertyAuditingData(property.Name, property.PropertyAccessorName);
115115
}
116+
117+
public void GenerateSecondPass(string entityName, PersistentClass persistentClass)
118+
{
119+
var identifierMapper = persistentClass.IdentifierMapper;
120+
var identifierProperty = persistentClass.IdentifierProperty;
121+
if (identifierMapper != null)
122+
{
123+
generateSecondPass(entityName, identifierMapper);
124+
}
125+
else if (identifierProperty != null && identifierProperty.IsComposite)
126+
{
127+
var component = (Component)identifierProperty.Value;
128+
generateSecondPass(entityName, component);
129+
}
130+
}
131+
132+
private void generateSecondPass(string entityName, Component component)
133+
{
134+
foreach (var property in component.PropertyIterator)
135+
{
136+
if (property.Value is ToOne toOneValue)
137+
{
138+
var propertyData = getIdPersistentPropertyAuditingData(property);
139+
var referencedEntityName = toOneValue.ReferencedEntityName;
140+
var prefix = _mainGenerator.VerEntCfg.OriginalIdPropName + "." + propertyData.Name;
141+
var relMapper = _mainGenerator.EntitiesConfigurations[referencedEntityName].IdMapper;
142+
var prefixedMapper = relMapper.PrefixMappedProperties(prefix + ".");
143+
144+
_mainGenerator.EntitiesConfigurations[entityName].AddToOneRelation(prefix, referencedEntityName, prefixedMapper, true, false);
145+
}
146+
}
147+
}
116148
}
117149
}

Src/NHibernate.Envers/Query/Criteria/CriteriaTools.cs

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -47,21 +47,25 @@ public static string DeterminePropertyName(AuditConfiguration auditCfg, IAuditRe
4747
public static string DeterminePropertyName(AuditConfiguration auditCfg, IAuditReaderImplementor versionsReader,
4848
string entityName, string propertyName)
4949
{
50-
var sessionFactory = versionsReader.SessionImplementor.Factory;
51-
if (AuditId.IdentifierPlaceholder.Equals(propertyName))
50+
if (propertyName != null)
5251
{
53-
var identifierPropertyName = sessionFactory.GetEntityPersister(entityName).IdentifierPropertyName;
54-
return auditCfg.AuditEntCfg.OriginalIdPropName + "." + identifierPropertyName;
55-
}
52+
var sessionFactory = versionsReader.SessionImplementor.Factory;
53+
if (AuditId.IdentifierPlaceholder.Equals(propertyName))
54+
{
55+
var identifierPropertyName = sessionFactory.GetEntityPersister(entityName).IdentifierPropertyName;
56+
return auditCfg.AuditEntCfg.OriginalIdPropName + "." + identifierPropertyName;
57+
}
5658

57-
var idPropertyName = sessionFactory.GetEntityPersister(entityName).IdentifierPropertyName;
58-
if (propertyName.Equals(idPropertyName))
59-
{
60-
return auditCfg.AuditEntCfg.OriginalIdPropName + "." + propertyName;
61-
}
62-
if (propertyName.StartsWith(idPropertyName + MappingTools.RelationCharacter))
63-
{
64-
return auditCfg.AuditEntCfg.OriginalIdPropName + "." + propertyName.Substring(idPropertyName.Length + 1);
59+
var idPropertyName = sessionFactory.GetEntityPersister(entityName).IdentifierPropertyName;
60+
if (propertyName.Equals(idPropertyName))
61+
{
62+
return auditCfg.AuditEntCfg.OriginalIdPropName + "." + propertyName;
63+
}
64+
if (propertyName.StartsWith(idPropertyName + MappingTools.RelationCharacter))
65+
{
66+
propertyName = propertyName.Replace(MappingTools.RelationCharacter, ".");
67+
return auditCfg.AuditEntCfg.OriginalIdPropName + propertyName.Substring(idPropertyName.Length);
68+
}
6569
}
6670

6771
return propertyName;

0 commit comments

Comments
 (0)