slight cleanup to old code
This commit is contained in:
parent
e1f62098e2
commit
b0b258de11
|
@ -11,9 +11,7 @@ import java.util.Iterator;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.hibernate.Hibernate;
|
||||
import org.hibernate.HibernateException;
|
||||
import org.hibernate.bytecode.enhance.spi.LazyPropertyInitializer;
|
||||
import org.hibernate.collection.spi.PersistentArrayHolder;
|
||||
import org.hibernate.collection.spi.PersistentCollection;
|
||||
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||
|
@ -21,6 +19,9 @@ import org.hibernate.engine.spi.SharedSessionContractImplementor;
|
|||
import org.hibernate.metamodel.CollectionClassification;
|
||||
import org.hibernate.persister.collection.CollectionPersister;
|
||||
|
||||
import static org.hibernate.Hibernate.isInitialized;
|
||||
import static org.hibernate.bytecode.enhance.spi.LazyPropertyInitializer.UNFETCHED_PROPERTY;
|
||||
|
||||
/**
|
||||
* A type for persistent arrays.
|
||||
* @author Gavin King
|
||||
|
@ -75,21 +76,22 @@ public class ArrayType extends CollectionType {
|
|||
if ( value == null ) {
|
||||
return "null";
|
||||
}
|
||||
int length = Array.getLength(value);
|
||||
List<String> list = new ArrayList<>(length);
|
||||
Type elemType = getElementType(factory);
|
||||
for ( int i=0; i<length; i++ ) {
|
||||
Object element = Array.get(value, i);
|
||||
if ( element == LazyPropertyInitializer.UNFETCHED_PROPERTY
|
||||
|| !Hibernate.isInitialized( element ) ) {
|
||||
list.add( "<uninitialized>" );
|
||||
}
|
||||
else {
|
||||
list.add( elemType.toLoggableString( element, factory ) );
|
||||
}
|
||||
final int length = Array.getLength( value );
|
||||
final Type elemType = getElementType( factory );
|
||||
final List<String> list = new ArrayList<>( length );
|
||||
for ( int i = 0; i < length; i++ ) {
|
||||
list.add( loggableString( factory, Array.get( value, i ), elemType ) );
|
||||
}
|
||||
return list.toString();
|
||||
}
|
||||
}
|
||||
|
||||
private static String loggableString(SessionFactoryImplementor factory, Object element, Type elemType) {
|
||||
return element == UNFETCHED_PROPERTY || !isInitialized( element )
|
||||
? "<uninitialized>"
|
||||
: elemType.toLoggableString( element, factory );
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object instantiateResult(Object original) {
|
||||
|
@ -101,16 +103,16 @@ public class ArrayType extends CollectionType {
|
|||
Object original,
|
||||
Object target,
|
||||
Object owner,
|
||||
Map copyCache,
|
||||
Map<Object, Object> copyCache,
|
||||
SharedSessionContractImplementor session) throws HibernateException {
|
||||
|
||||
int length = Array.getLength(original);
|
||||
final int length = Array.getLength(original);
|
||||
if ( length!=Array.getLength(target) ) {
|
||||
//note: this affects the return value!
|
||||
target=instantiateResult(original);
|
||||
}
|
||||
|
||||
Type elemType = getElementType( session.getFactory() );
|
||||
final Type elemType = getElementType( session.getFactory() );
|
||||
for ( int i=0; i<length; i++ ) {
|
||||
Array.set( target, i, elemType.replace( Array.get(original, i), null, session, owner, copyCache ) );
|
||||
}
|
||||
|
@ -126,7 +128,7 @@ public class ArrayType extends CollectionType {
|
|||
|
||||
@Override
|
||||
public Object indexOf(Object array, Object element) {
|
||||
int length = Array.getLength(array);
|
||||
final int length = Array.getLength(array);
|
||||
for ( int i=0; i<length; i++ ) {
|
||||
//TODO: proxies!
|
||||
if ( Array.get(array, i) == element ) {
|
||||
|
|
|
@ -57,22 +57,25 @@ public class MapType extends CollectionType {
|
|||
: new HashMap<>( anticipatedSize + (int) ( anticipatedSize * .75f ), .75f );
|
||||
}
|
||||
|
||||
@Override @SuppressWarnings("rawtypes")
|
||||
@Override @SuppressWarnings({"rawtypes", "unchecked"})
|
||||
public Object replaceElements(
|
||||
final Object original,
|
||||
final Object target,
|
||||
final Object owner,
|
||||
final Map copyCache,
|
||||
final Map<Object, Object> copyCache,
|
||||
final SharedSessionContractImplementor session) throws HibernateException {
|
||||
CollectionPersister cp = session.getFactory().getRuntimeMetamodels().getMappingMetamodel().getCollectionDescriptor( getRole() );
|
||||
final CollectionPersister persister =
|
||||
session.getFactory().getRuntimeMetamodels().getMappingMetamodel()
|
||||
.getCollectionDescriptor( getRole() );
|
||||
|
||||
Map result = (Map) target;
|
||||
final Map source = (Map) original;
|
||||
final Map result = (Map) target;
|
||||
result.clear();
|
||||
|
||||
for ( Object o : ( (Map) original ).entrySet() ) {
|
||||
Map.Entry me = (Map.Entry) o;
|
||||
Object key = cp.getIndexType().replace( me.getKey(), null, session, owner, copyCache );
|
||||
Object value = cp.getElementType().replace( me.getValue(), null, session, owner, copyCache );
|
||||
for ( Object entry : source.entrySet() ) {
|
||||
final Map.Entry me = (Map.Entry) entry;
|
||||
final Object key = persister.getIndexType().replace( me.getKey(), null, session, owner, copyCache );
|
||||
final Object value = persister.getElementType().replace( me.getValue(), null, session, owner, copyCache );
|
||||
result.put( key, value );
|
||||
}
|
||||
|
||||
|
@ -82,8 +85,9 @@ public class MapType extends CollectionType {
|
|||
|
||||
@Override @SuppressWarnings("rawtypes")
|
||||
public Object indexOf(Object collection, Object element) {
|
||||
for ( Object o : ( (Map) collection ).entrySet() ) {
|
||||
Map.Entry me = (Map.Entry) o;
|
||||
final Map map = (Map) collection;
|
||||
for ( Object entry : map.entrySet() ) {
|
||||
final Map.Entry me = (Map.Entry) entry;
|
||||
//TODO: proxies!
|
||||
if ( me.getValue() == element ) {
|
||||
return me.getKey();
|
||||
|
|
Loading…
Reference in New Issue