org.hibernate.type.MapType.java Source code

Java tutorial

Introduction

Here is the source code for org.hibernate.type.MapType.java

Source

/*
 * 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;
    }

}