@@ -161,14 +161,24 @@ protected internal object GetIdentifier(object value, ISessionImplementor sessio
161
161
return value ;
162
162
}
163
163
164
- if ( IsReferenceToPrimaryKey )
164
+ return ForeignKeys . GetEntityIdentifierIfNotUnsaved ( GetAssociatedEntityName ( ) , value , session ) ; //tolerates nulls
165
+ }
166
+
167
+ protected internal object GetReferenceValue ( object value , ISessionImplementor session )
168
+ {
169
+ if ( IsNotEmbedded ( session ) )
165
170
{
166
- return ForeignKeys . GetEntityIdentifierIfNotUnsaved ( GetAssociatedEntityName ( ) , value , session ) ; //tolerates nulls
171
+ return value ;
167
172
}
168
- else if ( value == null )
173
+
174
+ if ( value == null )
169
175
{
170
176
return null ;
171
177
}
178
+ else if ( IsReferenceToPrimaryKey )
179
+ {
180
+ return ForeignKeys . GetEntityIdentifierIfNotUnsaved ( GetAssociatedEntityName ( ) , value , session ) ; //tolerates nulls
181
+ }
172
182
else
173
183
{
174
184
IEntityPersister entityPersister = session . Factory . GetEntityPersister ( GetAssociatedEntityName ( ) ) ;
@@ -180,7 +190,7 @@ protected internal object GetIdentifier(object value, ISessionImplementor sessio
180
190
IType type = entityPersister . GetPropertyType ( uniqueKeyPropertyName ) ;
181
191
if ( type . IsEntityType )
182
192
{
183
- propertyValue = ( ( EntityType ) type ) . GetIdentifier ( propertyValue , session ) ;
193
+ propertyValue = ( ( EntityType ) type ) . GetReferenceValue ( propertyValue , session ) ;
184
194
}
185
195
186
196
return propertyValue ;
@@ -279,7 +289,7 @@ public override object Replace(object original, object target, ISessionImplement
279
289
}
280
290
else
281
291
{
282
- object id = GetIdentifier ( original , session ) ;
292
+ object id = GetReferenceValue ( original , session ) ;
283
293
if ( id == null )
284
294
{
285
295
throw new AssertionFailure ( "non-transient entity has a null id" ) ;
0 commit comments