mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-17 08:35:13 +00:00
HHH-12370 Lazily-initialized byte[] LOB gets turned into a String, resulting in poor performance
This commit is contained in:
parent
0719c48540
commit
0bc7aecb6c
@ -27,8 +27,8 @@
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
public class StandardCacheEntryImpl implements CacheEntry {
|
||||
|
||||
private final Serializable[] disassembledState;
|
||||
private String disassembledStateText;
|
||||
private final Object version;
|
||||
private final String subclass;
|
||||
|
||||
@ -57,18 +57,12 @@ public StandardCacheEntryImpl(
|
||||
session,
|
||||
owner
|
||||
);
|
||||
this.disassembledStateText = TypeHelper.toLoggableString(
|
||||
state,
|
||||
persister.getPropertyTypes(),
|
||||
session.getFactory()
|
||||
);
|
||||
this.subclass = persister.getEntityName();
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
StandardCacheEntryImpl(Serializable[] disassembledState, String disassembledStateText, String subclass, Object version) {
|
||||
StandardCacheEntryImpl(Serializable[] disassembledState, String subclass, Object version) {
|
||||
this.disassembledState = disassembledState;
|
||||
this.disassembledStateText = disassembledStateText;
|
||||
this.subclass = subclass;
|
||||
this.version = version;
|
||||
}
|
||||
@ -144,14 +138,6 @@ public Object[] assemble(
|
||||
session, instance
|
||||
);
|
||||
|
||||
if ( disassembledStateText == null ) {
|
||||
disassembledStateText = TypeHelper.toLoggableString(
|
||||
state,
|
||||
persister.getPropertyTypes(),
|
||||
session.getFactory()
|
||||
);
|
||||
}
|
||||
|
||||
//persister.setIdentifier(instance, id); //before calling interceptor, for consistency with normal load
|
||||
|
||||
//TODO: reuse the PreLoadEvent
|
||||
@ -177,6 +163,7 @@ public Object[] assemble(
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "CacheEntry(" + subclass + " {" + disassembledStateText + "})";
|
||||
return "CacheEntry(" + subclass + ')';
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -49,7 +49,6 @@ public Object destructure(Object structured, SessionFactoryImplementor factory)
|
||||
}
|
||||
return new StandardCacheEntryImpl(
|
||||
disassembledState,
|
||||
null,
|
||||
subclass,
|
||||
version
|
||||
);
|
||||
|
@ -6,17 +6,14 @@
|
||||
*/
|
||||
package org.hibernate.type;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
|
||||
import org.hibernate.Hibernate;
|
||||
import org.hibernate.bytecode.enhance.spi.LazyPropertyInitializer;
|
||||
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||
import org.hibernate.engine.spi.SharedSessionContractImplementor;
|
||||
import org.hibernate.property.access.internal.PropertyAccessStrategyBackRefImpl;
|
||||
import org.hibernate.tuple.NonIdentifierAttribute;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Collection of convenience methods relating to operations across arrays of types...
|
||||
*
|
||||
@ -404,24 +401,4 @@ public static int[] findModified(
|
||||
}
|
||||
}
|
||||
|
||||
public static String toLoggableString(
|
||||
Object[] state,
|
||||
Type[] types,
|
||||
SessionFactoryImplementor factory) {
|
||||
final StringBuilder buff = new StringBuilder();
|
||||
for ( int i = 0; i < state.length; i++ ) {
|
||||
if ( i > 0 ) {
|
||||
buff.append( ", " );
|
||||
}
|
||||
|
||||
// HHH-11173 - Instead of having to account for unfectched lazy properties in all types, it's done here
|
||||
if ( state[i] == LazyPropertyInitializer.UNFETCHED_PROPERTY || !Hibernate.isInitialized( state[i] ) ) {
|
||||
buff.append( "<uninitialized>" );
|
||||
}
|
||||
else {
|
||||
buff.append( types[i].toLoggableString( state[i], factory ) );
|
||||
}
|
||||
}
|
||||
return buff.toString();
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user