extract two methods

and add a TODO (a question for @dreab8)
This commit is contained in:
Gavin King 2024-12-20 08:03:33 +01:00
parent 6f0a6c3b35
commit eb1e19fd9a

View File

@ -357,49 +357,54 @@ public boolean requiresDirtyCheck(Object entity) {
}
private boolean isUnequivocallyNonDirty(Object entity) {
if ( isSelfDirtinessTracker( entity ) ) {
final boolean uninitializedProxy;
if ( isPersistentAttributeInterceptable( entity ) ) {
final PersistentAttributeInterceptor interceptor =
asPersistentAttributeInterceptable( entity ).$$_hibernate_getInterceptor();
if ( interceptor instanceof EnhancementAsProxyLazinessInterceptor ) {
EnhancementAsProxyLazinessInterceptor enhancementAsProxyLazinessInterceptor =
(EnhancementAsProxyLazinessInterceptor) interceptor;
return !enhancementAsProxyLazinessInterceptor.hasWrittenFieldNames(); //EARLY EXIT!
}
else {
uninitializedProxy = false;
}
return isSelfDirtinessTracker( entity )
? isNonDirtyViaTracker( entity )
: isNonDirtyViaCustomStrategy( entity );
}
private boolean isNonDirtyViaCustomStrategy(Object entity) {
if ( isPersistentAttributeInterceptable( entity ) ) {
final PersistentAttributeInterceptor interceptor =
asPersistentAttributeInterceptable( entity ).$$_hibernate_getInterceptor();
if ( interceptor instanceof EnhancementAsProxyLazinessInterceptor ) {
// we never have to check an uninitialized proxy
// TODO: why do we not check !lazinessInterceptor.hasWrittenFieldNames()
// as we do below in isNonDirtyViaTracker() ?
return true;
}
else if ( isHibernateProxy( entity ) ) {
uninitializedProxy = extractLazyInitializer( entity ).isUninitialized();
}
final SessionImplementor session = getPersistenceContext().getSession().asSessionImplementor();
final CustomEntityDirtinessStrategy customEntityDirtinessStrategy =
session.getFactory().getCustomEntityDirtinessStrategy();
return customEntityDirtinessStrategy.canDirtyCheck( entity, getPersister(), session )
&& !customEntityDirtinessStrategy.isDirty( entity, getPersister(), session );
}
private boolean isNonDirtyViaTracker(Object entity) {
final boolean uninitializedProxy;
if ( isPersistentAttributeInterceptable( entity ) ) {
final PersistentAttributeInterceptor interceptor =
asPersistentAttributeInterceptable( entity ).$$_hibernate_getInterceptor();
if ( interceptor instanceof EnhancementAsProxyLazinessInterceptor lazinessInterceptor ) {
return !lazinessInterceptor.hasWrittenFieldNames();
}
else {
uninitializedProxy = false;
}
// we never have to check an uninitialized proxy
return uninitializedProxy
|| !persister.hasCollections()
&& !persister.hasMutableProperties()
&& !asSelfDirtinessTracker( entity ).$$_hibernate_hasDirtyAttributes()
&& asManagedEntity( entity ).$$_hibernate_useTracker();
}
else if ( isHibernateProxy( entity ) ) {
uninitializedProxy = extractLazyInitializer( entity ).isUninitialized();
}
else {
if ( isPersistentAttributeInterceptable( entity ) ) {
final PersistentAttributeInterceptor interceptor =
asPersistentAttributeInterceptable( entity ).$$_hibernate_getInterceptor();
if ( interceptor instanceof EnhancementAsProxyLazinessInterceptor ) {
// we never have to check an uninitialized proxy
return true; //EARLY EXIT!
}
}
final SessionImplementor session = getPersistenceContext().getSession().asSessionImplementor();
final CustomEntityDirtinessStrategy customEntityDirtinessStrategy =
session.getFactory().getCustomEntityDirtinessStrategy();
return customEntityDirtinessStrategy.canDirtyCheck( entity, getPersister(), session )
&& !customEntityDirtinessStrategy.isDirty( entity, getPersister(), session );
uninitializedProxy = false;
}
// we never have to check an uninitialized proxy
return uninitializedProxy
|| !persister.hasCollections()
&& !persister.hasMutableProperties()
&& !asSelfDirtinessTracker( entity ).$$_hibernate_hasDirtyAttributes()
&& asManagedEntity( entity ).$$_hibernate_useTracker();
}
@Override