Java tutorial
/* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public License (LGPL), version 2.1 or later. * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.type; import java.io.Serializable; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.hibernate.HibernateException; import org.hibernate.collection.internal.PersistentMap; import org.hibernate.collection.spi.PersistentCollection; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.persister.collection.CollectionPersister; public class MapType extends CollectionType { /** * @deprecated Use the other contructor */ @Deprecated public MapType(TypeFactory.TypeScope typeScope, String role, String propertyRef) { this(role, propertyRef); } public MapType(String role, String propertyRef) { super(role, propertyRef); } @Override public PersistentCollection instantiate(SharedSessionContractImplementor session, CollectionPersister persister, Serializable key) { return new PersistentMap(session); } @Override public Class getReturnedClass() { return Map.class; } @Override public Iterator getElementsIterator(Object collection) { return ((java.util.Map) collection).values().iterator(); } @Override public PersistentCollection wrap(SharedSessionContractImplementor session, Object collection) { return new PersistentMap(session, (java.util.Map) collection); } @Override public Object instantiate(int anticipatedSize) { return anticipatedSize <= 0 ? new HashMap() : new HashMap(anticipatedSize + (int) (anticipatedSize * .75f), .75f); } @Override public Object replaceElements(final Object original, final Object target, final Object owner, final java.util.Map copyCache, final SharedSessionContractImplementor session) throws HibernateException { CollectionPersister cp = session.getFactory().getMetamodel().collectionPersister(getRole()); java.util.Map result = (java.util.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); result.put(key, value); } return result; } @Override public Object indexOf(Object collection, Object element) { for (Object o : ((Map) collection).entrySet()) { Map.Entry me = (Map.Entry) o; //TODO: proxies! if (me.getValue() == element) { return me.getKey(); } } return null; } }