From 24035d7f2cf211e3ed72602064a316f8b730933c Mon Sep 17 00:00:00 2001 From: David Ellingsworth Date: Tue, 13 Oct 2020 17:02:29 -0400 Subject: [PATCH] HHH-14216 Implement isDirty for OneToOneType and always check if it is dirty or not. --- .../java/org/hibernate/type/OneToOneType.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/type/OneToOneType.java b/hibernate-core/src/main/java/org/hibernate/type/OneToOneType.java index 2c3943b51bd4..07311e32bf10 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/OneToOneType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/OneToOneType.java @@ -151,12 +151,19 @@ public boolean isOneToOne() { @Override public boolean isDirty(Object old, Object current, SharedSessionContractImplementor session) { - return false; + if ( isSame( old, current ) ) { + return false; + } + + Object oldid = getIdentifier( old, session ); + Object newid = getIdentifier( current, session ); + + return getIdentifierType( session ).isDirty( oldid, newid, session ); } @Override public boolean isDirty(Object old, Object current, boolean[] checkable, SharedSessionContractImplementor session) { - return false; + return isDirty(old, current, session); } @Override @@ -218,14 +225,8 @@ public Object assemble(Serializable oid, SharedSessionContractImplementor sessio return resolveIdentifier( id, session ); } - /** - * We don't need to dirty check one-to-one because of how - * assemble/disassemble is implemented and because a one-to-one - * association is never dirty - */ @Override public boolean isAlwaysDirtyChecked() { - //TODO: this is kinda inconsistent with CollectionType - return false; + return true; } }