@@ -281,8 +281,7 @@ else if ( y == null ) {
281
281
}
282
282
283
283
private Object extractIdentifier (Object entity , SessionFactoryImplementor factory ) {
284
- final EntityPersister concretePersister =
285
- factory .getMappingMetamodel ().getEntityDescriptor ( associatedEntityName );
284
+ final EntityPersister concretePersister = getAssociatedEntityPersister ( factory );
286
285
return concretePersister == null
287
286
? null
288
287
: concretePersister .getIdentifier ( entity , null );
@@ -345,21 +344,28 @@ public Object replace(
345
344
@ Override
346
345
public int getHashCode (Object x , SessionFactoryImplementor factory ) {
347
346
final EntityPersister persister = getAssociatedEntityPersister ( factory );
348
- final Object id ;
349
- final LazyInitializer lazyInitializer = extractLazyInitializer ( x );
350
- if ( lazyInitializer != null ) {
351
- id = lazyInitializer .getInternalIdentifier ();
352
- }
353
- else {
354
- final Class <?> mappedClass = persister .getMappedClass ();
355
- if ( mappedClass .isAssignableFrom ( x .getClass () ) ) {
356
- id = persister .getIdentifier ( x , null );
347
+ if ( isReferenceToPrimaryKey () ) {
348
+ final Object id ;
349
+ final LazyInitializer lazyInitializer = extractLazyInitializer ( x );
350
+ if ( lazyInitializer != null ) {
351
+ id = lazyInitializer .getInternalIdentifier ();
357
352
}
358
353
else {
359
- id = x ;
354
+ final Class <?> mappedClass = persister .getMappedClass ();
355
+ if ( mappedClass .isAssignableFrom ( x .getClass () ) ) {
356
+ id = persister .getIdentifier ( x , null );
357
+ }
358
+ else {
359
+ id = x ;
360
+ }
360
361
}
362
+ return persister .getIdentifierType ().getHashCode ( id , factory );
363
+ }
364
+ else {
365
+ assert uniqueKeyPropertyName != null ;
366
+ final Type keyType = persister .getPropertyType ( uniqueKeyPropertyName );
367
+ return keyType .getHashCode ( x , factory );
361
368
}
362
- return persister .getIdentifierType ().getHashCode ( id , factory );
363
369
}
364
370
365
371
@ Override
0 commit comments