mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-08 20:24:46 +00:00
extract two methods
and add a TODO (a question for @dreab8)
This commit is contained in:
parent
6f0a6c3b35
commit
eb1e19fd9a
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user