public void replace(CollectionPersister persister, Map copyCache) { if ( addedValue != null ) { addedValue = getReplacement( persister.getElementType(), addedValue, copyCache ); } }
/** * Checks whether the old collection element and new collection element are the same. * By default, this delegates to the collection persister's {@link CollectionPersister#getElementType()}. * * @param collectionPersister The collection persister. * @param oldObject The collection element from the old persistent collection. * @param newObject The collection element from the new persistent collection. * * @return true if the two objects are the same, false otherwise. */ protected boolean isSame(CollectionPersister collectionPersister, Object oldObject, Object newObject) { return collectionPersister.getElementType().isSame( oldObject, newObject ); }
@Override @SuppressWarnings( {"unchecked"}) public Serializable getSnapshot(CollectionPersister persister) throws HibernateException { final HashMap clonedMap = new HashMap( map.size() ); for ( Object o : map.entrySet() ) { final Entry e = (Entry) o; final Object copy = persister.getElementType().deepCopy( e.getValue(), persister.getFactory() ); clonedMap.put( e.getKey(), copy ); } return clonedMap; }
@Override @SuppressWarnings("unchecked") public Serializable disassemble(CollectionPersister persister) throws HibernateException { final Serializable[] result = new Serializable[ set.size() ]; final Iterator itr = set.iterator(); int i=0; while ( itr.hasNext() ) { result[i++] = persister.getElementType().disassemble( itr.next(), getSession(), null ); } return result; }
@Override @SuppressWarnings( {"unchecked"}) public Serializable getSnapshot(CollectionPersister persister) throws HibernateException { final ArrayList clonedList = new ArrayList( list.size() ); for ( Object element : list ) { final Object deepCopy = persister.getElementType().deepCopy( element, persister.getFactory() ); clonedList.add( deepCopy ); } return clonedList; }
@Override @SuppressWarnings( {"unchecked"}) public Serializable getSnapshot(CollectionPersister persister) throws HibernateException { final HashMap clonedSet = new HashMap( set.size() ); for ( Object aSet : set ) { final Object copied = persister.getElementType().deepCopy( aSet, persister.getFactory() ); clonedSet.put( copied, copied ); } return clonedSet; }
@Override @SuppressWarnings("unchecked") public Serializable getSnapshot(CollectionPersister persister) throws HibernateException { final ArrayList clonedList = new ArrayList( bag.size() ); for ( Object item : bag ) { clonedList.add( persister.getElementType().deepCopy( item, persister.getFactory() ) ); } return clonedList; }
@Override public Serializable disassemble(CollectionPersister persister) throws HibernateException { final int length = bag.size(); final Serializable[] result = new Serializable[length]; for ( int i=0; i<length; i++ ) { result[i] = persister.getElementType().disassemble( bag.get( i ), getSession(), null ); } return result; }
@Override protected boolean isSame(CollectionPersister collectionPersister, Object oldObject, Object newObject) { final Map.Entry oldEntry = Map.Entry.class.cast( oldObject ); final Map.Entry newEntry = Map.Entry.class.cast( newObject ); if ( collectionPersister.getKeyType().isSame( oldEntry.getKey(), newEntry.getKey() ) ) { if ( collectionPersister.getElementType().isSame( oldEntry.getValue(), newEntry.getValue() ) ) { return true; } } return false; }
@Override public Serializable disassemble(CollectionPersister persister) throws HibernateException { final int length = Array.getLength( array ); final Serializable[] result = new Serializable[length]; for ( int i=0; i<length; i++ ) { result[i] = persister.getElementType().disassemble( Array.get( array,i ), getSession(), null ); } return result; }
@Override @SuppressWarnings("unchecked") public Serializable disassemble(CollectionPersister persister) throws HibernateException { final int length = list.size(); final Serializable[] result = new Serializable[length]; for ( int i=0; i<length; i++ ) { result[i] = persister.getElementType().disassemble( list.get( i ), getSession(), null ); } return result; }
@Override public void initializeFromCache(CollectionPersister persister, Serializable disassembled, Object owner) throws HibernateException { final Serializable[] cached = (Serializable[]) disassembled; array = Array.newInstance( persister.getElementClass(), cached.length ); for ( int i=0; i<cached.length; i++ ) { Array.set( array, i, persister.getElementType().assemble( cached[i], getSession(), owner ) ); } }
/** * Get the Hibernate type of the collection elements * * @param factory The session factory. * @return The type of the collection elements * @throws MappingException Indicates the underlying persister could not be located. */ public final Type getElementType(SessionFactoryImplementor factory) throws MappingException { return factory.getCollectionPersister( getRole() ).getElementType(); }
@Override @SuppressWarnings("unchecked") public Serializable disassemble(CollectionPersister persister) throws HibernateException { final Serializable[] result = new Serializable[ map.size() * 2 ]; final Iterator itr = map.entrySet().iterator(); int i=0; while ( itr.hasNext() ) { final Map.Entry e = (Map.Entry) itr.next(); result[i++] = persister.getIndexType().disassemble( e.getKey(), getSession(), null ); result[i++] = persister.getElementType().disassemble( e.getValue(), getSession(), null ); } return result; }
@Override @SuppressWarnings("unchecked") public void initializeFromCache(CollectionPersister persister, Serializable disassembled, Object owner) throws HibernateException { final Serializable[] array = (Serializable[]) disassembled; final int size = array.length; beforeInitialize( persister, size ); for ( Serializable arrayElement : array ) { list.add( persister.getElementType().assemble( arrayElement, getSession(), owner ) ); } }
@Override public Serializable disassemble(CollectionPersister persister) throws HibernateException { final Serializable[] result = new Serializable[ values.size() * 2 ]; int i = 0; for ( int j=0; j< values.size(); j++ ) { final Object value = values.get( j ); result[i++] = persister.getIdentifierType().disassemble( identifiers.get( j ), getSession(), null ); result[i++] = persister.getElementType().disassemble( value, getSession(), null ); } return result; }
public void collectQuerySpaces(Collection<String> spaces) { for ( EntityPersister persister : alias2Persister.values() ) { Collections.addAll( spaces, (String[]) persister.getQuerySpaces() ); } for ( CollectionPersister persister : alias2CollectionPersister.values() ) { final Type elementType = persister.getElementType(); if ( elementType.isEntityType() && ! elementType.isAnyType() ) { final Joinable joinable = ( (EntityType) elementType ).getAssociatedJoinable( factory ); Collections.addAll( spaces, (String[]) ( (EntityPersister) joinable ).getQuerySpaces() ); } } } }
@Override @SuppressWarnings("unchecked") public void initializeFromCache(CollectionPersister persister, Serializable disassembled, Object owner) throws HibernateException { final Serializable[] array = (Serializable[]) disassembled; final int size = array.length; beforeInitialize( persister, size ); for ( Serializable item : array ) { final Object element = persister.getElementType().assemble( item, getSession(), owner ); if ( element != null ) { bag.add( element ); } } }
@Override public void initializeFromCache(CollectionPersister persister, Serializable disassembled, Object owner) throws HibernateException { final Serializable[] array = (Serializable[]) disassembled; final int size = array.length; beforeInitialize( persister, size ); for ( int i = 0; i < size; i+=2 ) { identifiers.put( (i/2), persister.getIdentifierType().assemble( array[i], getSession(), owner ) ); values.add( persister.getElementType().assemble( array[i+1], getSession(), owner ) ); } }
@Override @SuppressWarnings("unchecked") public void initializeFromCache(CollectionPersister persister, Serializable disassembled, Object owner) throws HibernateException { final Serializable[] array = (Serializable[]) disassembled; final int size = array.length; beforeInitialize( persister, size ); for ( int i = 0; i < size; i+=2 ) { map.put( persister.getIndexType().assemble( array[i], getSession(), owner ), persister.getElementType().assemble( array[i+1], getSession(), owner ) ); } }