HHH-11097 - Performance problem if cached entity has attribute state with an expensive toString() method (LOB, etc)
This commit is contained in:
parent
c7c9e42145
commit
0a2a5c622e
|
@ -179,7 +179,23 @@ public abstract class CollectionType extends AbstractType implements Association
|
|||
if ( value == null ) {
|
||||
return "null";
|
||||
}
|
||||
else if ( !Hibernate.isInitialized( value ) ) {
|
||||
|
||||
if ( !getReturnedClass().isInstance( value ) && !PersistentCollection.class.isInstance( value ) ) {
|
||||
// its most likely the collection-key
|
||||
final CollectionPersister persister = getPersister( factory );
|
||||
if ( persister.getKeyType().getReturnedClass().isInstance( value ) ) {
|
||||
return getRole() + "#" + getPersister( factory ).getKeyType().toLoggableString( value, factory );
|
||||
}
|
||||
else {
|
||||
// although it could also be the collection-id
|
||||
if ( persister.getIdentifierType() != null
|
||||
&& persister.getIdentifierType().getReturnedClass().isInstance( value ) ) {
|
||||
return getRole() + "#" + getPersister( factory ).getIdentifierType().toLoggableString( value, factory );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( !Hibernate.isInitialized( value ) ) {
|
||||
return "<uninitialized>";
|
||||
}
|
||||
else {
|
||||
|
@ -289,7 +305,11 @@ public abstract class CollectionType extends AbstractType implements Association
|
|||
* @return The underlying collection persister
|
||||
*/
|
||||
private CollectionPersister getPersister(SharedSessionContractImplementor session) {
|
||||
return session.getFactory().getMetamodel().collectionPersister( role );
|
||||
return getPersister( session.getFactory() );
|
||||
}
|
||||
|
||||
private CollectionPersister getPersister(SessionFactoryImplementor factory) {
|
||||
return factory.getMetamodel().collectionPersister( role );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -499,8 +499,15 @@ public abstract class EntityType extends AbstractType implements AssociationType
|
|||
return "null";
|
||||
}
|
||||
|
||||
EntityPersister persister = getAssociatedEntityPersister( factory );
|
||||
StringBuilder result = new StringBuilder().append( associatedEntityName );
|
||||
final EntityPersister persister = getAssociatedEntityPersister( factory );
|
||||
if ( !persister.getEntityTuplizer().isInstance( value ) ) {
|
||||
// it should be the id type...
|
||||
if ( persister.getIdentifierType().getReturnedClass().isInstance( value ) ) {
|
||||
return associatedEntityName + "#" + value;
|
||||
}
|
||||
}
|
||||
|
||||
final StringBuilder result = new StringBuilder().append( associatedEntityName );
|
||||
|
||||
if ( persister.hasIdentifierProperty() ) {
|
||||
final Serializable id;
|
||||
|
|
|
@ -63,7 +63,7 @@ public class BlobTypeDescriptor extends AbstractTypeDescriptor<Blob> {
|
|||
|
||||
@Override
|
||||
public String extractLoggableRepresentation(Blob value) {
|
||||
return value == null ? "null" : "BLOB{...}";
|
||||
return value == null ? "null" : "{blob}";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -57,7 +57,7 @@ public class ClobTypeDescriptor extends AbstractTypeDescriptor<Clob> {
|
|||
|
||||
@Override
|
||||
public String extractLoggableRepresentation(Clob value) {
|
||||
return value == null ? "null" : "CLOB{...}";
|
||||
return value == null ? "null" : "{clob}";
|
||||
}
|
||||
|
||||
public String toString(Clob value) {
|
||||
|
|
|
@ -57,7 +57,7 @@ public class NClobTypeDescriptor extends AbstractTypeDescriptor<NClob> {
|
|||
|
||||
@Override
|
||||
public String extractLoggableRepresentation(NClob value) {
|
||||
return value == null ? "null" : "NCLOB{...}";
|
||||
return value == null ? "null" : "{nclob}";
|
||||
}
|
||||
|
||||
public String toString(NClob value) {
|
||||
|
|
Loading…
Reference in New Issue