org.hibernate.metamodel.model.domain.JpaMetamodel Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hibernate-core Show documentation
Show all versions of hibernate-core Show documentation
Hibernate's core ORM functionality
/*
* 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.metamodel.model.domain;
import java.util.List;
import java.util.Set;
import java.util.function.Consumer;
import javax.persistence.metamodel.EmbeddableType;
import javax.persistence.metamodel.EntityType;
import javax.persistence.metamodel.ManagedType;
import org.hibernate.Incubating;
import org.hibernate.graph.spi.RootGraphImplementor;
import org.hibernate.metamodel.spi.DomainMetamodel;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.type.spi.TypeConfiguration;
/**
* Hibernate extension to the JPA {@link javax.persistence.metamodel.Metamodel} contract
*
* @author Steve Ebersole
* @see DomainMetamodel
*/
@Incubating
public interface JpaMetamodel extends javax.persistence.metamodel.Metamodel {
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Context
/**
* todo (6.0) : should we expose JpaMetamodel from TypeConfiguration?
*/
TypeConfiguration getTypeConfiguration();
default ServiceRegistry getServiceRegistry() {
return getTypeConfiguration().getServiceRegistry();
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Extended features
/**
* Access to an entity supporting Hibernate's entity-name feature
*/
EntityDomainType entity(String entityName);
/**
* Specialized handling for resolving entity-name references in
* an HQL query
*/
EntityDomainType resolveHqlEntityReference(String entityName);
/**
* Visitation over all managed types via Consumer
*/
void visitManagedTypes(Consumer> action);
/**
* Same as {@link #managedType} except {@code null} is returned rather
* than throwing an exception
*/
ManagedDomainType findManagedType(Class cls);
/**
* Visitation over all entity types via Consumer
*/
void visitEntityTypes(Consumer> action);
/**
* Same as {@link #entity} except {@code null} is returned rather
* than throwing an exception
*/
EntityDomainType findEntityType(Class cls);
void visitRootEntityTypes(Consumer> action);
void visitEmbeddables(Consumer> action);
String qualifyImportableName(String queryName);
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Covariant returns
@Override
ManagedDomainType managedType(Class cls);
@Override
EntityDomainType entity(Class cls);
@Override
EmbeddableDomainType embeddable(Class cls);
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// JPA defined bulk accessors
@Override
Set> getManagedTypes();
@Override
Set> getEntities();
@Override
Set> getEmbeddables();
void addNamedEntityGraph(String graphName, RootGraphImplementor entityGraph);
RootGraphImplementor findEntityGraphByName(String name);
List> findEntityGraphsByJavaType(Class entityClass);
}