
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