@@ -21,13 +21,36 @@ public ColumnCollectionAliases(IDictionary<string, string[]> userProvidedAliases
2121 {
2222 this . userProvidedAliases = userProvidedAliases ;
2323
24- keyAliases = GetUserProvidedAliases ( "key" , persister . KeyColumnNames ) ;
24+ this . keyAliases = GetUserProvidedAliases ( "key" , persister . KeyColumnNames ) ;
25+ this . indexAliases = GetUserProvidedAliases ( "index" , persister . IndexColumnNames ) ;
26+ this . elementAliases = GetUserProvidedAliases ( "element" , persister . ElementColumnNames ) ;
2527
26- indexAliases = GetUserProvidedAliases ( "index" , persister . IndexColumnNames ) ;
28+ // NH-1612: Add aliases for all composite element properties to support access
29+ // to individual composite element properties in <return-property> elements.
30+ this . elementAliases = persister . ElementType . IsComponentType
31+ ? GetUserProvidedCompositeElementAliases ( persister . ElementColumnNames )
32+ : GetUserProvidedAliases ( "element" , persister . ElementColumnNames ) ;
2733
28- elementAliases = GetUserProvidedAliases ( "element" , persister . ElementColumnNames ) ;
34+ this . identifierAlias = GetUserProvidedAlias ( "id" , persister . IdentifierColumnName ) ;
35+ }
2936
30- identifierAlias = GetUserProvidedAlias ( "id" , persister . IdentifierColumnName ) ;
37+ private string [ ] GetUserProvidedCompositeElementAliases ( string [ ] defaultAliases )
38+ {
39+ if ( userProvidedAliases != null )
40+ {
41+ var aliases = new List < string > ( ) ;
42+ foreach ( var userProvidedAlias in userProvidedAliases )
43+ {
44+ if ( userProvidedAlias . Key . StartsWith ( "element." ) )
45+ {
46+ aliases . AddRange ( userProvidedAlias . Value ) ;
47+ }
48+ }
49+
50+ if ( aliases . Count > 0 ) return aliases . ToArray ( ) ;
51+ }
52+
53+ return defaultAliases ;
3154 }
3255
3356 /// <summary>
@@ -96,27 +119,17 @@ private static string Join(IEnumerable aliases)
96119 private string [ ] GetUserProvidedAliases ( string propertyPath , string [ ] defaultAliases )
97120 {
98121 string [ ] result ;
99- if ( ! userProvidedAliases . TryGetValue ( propertyPath , out result ) )
100- {
101- return defaultAliases ;
102- }
103- else
104- {
105- return result ;
106- }
122+ return userProvidedAliases == null || ! userProvidedAliases . TryGetValue ( propertyPath , out result )
123+ ? defaultAliases
124+ : result ;
107125 }
108126
109127 private string GetUserProvidedAlias ( string propertyPath , string defaultAlias )
110128 {
111129 string [ ] columns ;
112- if ( ! userProvidedAliases . TryGetValue ( propertyPath , out columns ) )
113- {
114- return defaultAlias ;
115- }
116- else
117- {
118- return columns [ 0 ] ;
119- }
130+ return userProvidedAliases == null || ! userProvidedAliases . TryGetValue ( propertyPath , out columns )
131+ ? defaultAlias
132+ : columns [ 0 ] ;
120133 }
121134 }
122135}
0 commit comments