All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.blazebit.persistence.impl.EntityMetamodel Maven / Gradle / Ivy

The newest version!
package com.blazebit.persistence.impl;

import javax.persistence.metamodel.EmbeddableType;
import javax.persistence.metamodel.EntityType;
import javax.persistence.metamodel.ManagedType;
import javax.persistence.metamodel.Metamodel;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * This is a wrapper around the JPA {@link Metamodel} allows additionally efficient access by other attributes than a Class.
 *
 * @author Christian Beikov
 * @since 1.2
 */
public class EntityMetamodel implements Metamodel {

    private final Metamodel delegate;
    private final Map> entityNameMap;
    private final Map, ManagedType> classMap;

    public EntityMetamodel(Metamodel delegate) {
        this.delegate = delegate;
        Set> managedTypes = delegate.getManagedTypes();
        Map> nameToType = new HashMap>(managedTypes.size());
        Map, ManagedType> classToType = new HashMap, ManagedType>(managedTypes.size());

        for (ManagedType t : managedTypes) {
            if (t instanceof EntityType) {
                EntityType e = (EntityType) t;
                nameToType.put(e.getName(), e);
            }
            classToType.put(t.getJavaType(), t);
        }

        this.entityNameMap = Collections.unmodifiableMap(nameToType);
        this.classMap = Collections.unmodifiableMap(classToType);
    }

    @Override
    public  EntityType entity(Class cls) {
        return delegate.entity(cls);
    }

    @Override
    public  ManagedType managedType(Class cls) {
        return delegate.managedType(cls);
    }

    public ManagedType managedType(String name) {
        ManagedType t = entityNameMap.get(name);
        if (t == null) {
            throw new IllegalStateException("Managed type with name '" + name + "' does not exist!");
        }

        return t;
    }

    @SuppressWarnings({ "unchecked" })
    public  ManagedType getManagedType(Class cls) {
        return (ManagedType) classMap.get(cls);
    }

    @Override
    public  EmbeddableType embeddable(Class cls) {
        return delegate.embeddable(cls);
    }

    @Override
    public Set> getManagedTypes() {
        return delegate.getManagedTypes();
    }

    @Override
    public Set> getEntities() {
        return delegate.getEntities();
    }

    @Override
    public Set> getEmbeddables() {
        return delegate.getEmbeddables();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy