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

org.hibernate.metamodel.model.domain.JpaMetamodel Maven / Gradle / Ivy

There is a newer version: 7.0.0.Beta1
Show newest version
/*
 * 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);
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy