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

org.hibernate.metamodel.model.domain.spi.ManagedTypeDescriptor Maven / Gradle / Ivy

There is a newer version: 7.0.0.Alpha1
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.spi;

import javax.persistence.metamodel.CollectionAttribute;
import javax.persistence.metamodel.ListAttribute;
import javax.persistence.metamodel.ManagedType;
import javax.persistence.metamodel.MapAttribute;
import javax.persistence.metamodel.SetAttribute;
import javax.persistence.metamodel.SingularAttribute;

import org.hibernate.graph.Graph;
import org.hibernate.graph.spi.SubGraphImplementor;
import org.hibernate.metamodel.model.domain.ManagedDomainType;

/**
 * Hibernate extension to the JPA {@link ManagedType} descriptor
 *
 * @author Steve Ebersole
 */
public interface ManagedTypeDescriptor extends SimpleTypeDescriptor, ManagedDomainType {
	/**
	 * Get this ManagedType's super type descriptor.  ATM only supported for the
	 * {@link IdentifiableTypeDescriptor} branch of the ManagedType tree
	 */
	ManagedTypeDescriptor getSuperType();

	/**
	 * The Hibernate "type name" ("entity name" - for non-POJO representations)
	 */
	String getName();

	/**
	 * Make an empty sub-graph based on this type.
	 *
	 * @apiNote Note that this is *not* the same as the type's
	 * {@linkplain #getDefaultGraph "default" graph}
	 */
	SubGraphImplementor makeSubGraph();

	/**
	 * The default graph for this type.  Generally this is used to
	 * implement JPA's notion of a "load graph" for undefined sub-graphs.
	 *
	 * @apiNote The return is immutable ({@link Graph#isMutable()} == {@code false}) -
	 * use a {@linkplain Graph#makeCopy mutable copy}
	 */
	default SubGraphImplementor getDefaultGraph() {
		throw new UnsupportedOperationException( "Not yet implemented - " + getClass().getName() );
	}

	/**
	 * Make a sub-graph based on one of this type's sub-types
	 */
	 SubGraphImplementor makeSubGraph(Class subType);

	 ManagedTypeDescriptor findSubType(String subTypeName);

	 ManagedTypeDescriptor findSubType(Class type);

	/**
	 * In-flight access to the managed type.  Used to add attributes, etc.
	 * Valid only during boot.
	 */
	InFlightAccess getInFlightAccess();

	/**
	 * Used during creation of the managed type object to add its attributes
	 */
	interface InFlightAccess {
		void addAttribute(PersistentAttributeDescriptor attribute);

		/**
		 * Called when configuration of the managed-type is complete
		 */
		void finishUp();
	}

	PersistentAttributeDescriptor findDeclaredAttribute(String name);

	PersistentAttributeDescriptor findAttribute(String name);

	@Override
	PersistentAttributeDescriptor getDeclaredAttribute(String name);

	@Override
	PersistentAttributeDescriptor getAttribute(String name);

	@Override
	 SingularPersistentAttribute getSingularAttribute(String name, Class type);

	@Override
	 SingularPersistentAttribute getDeclaredSingularAttribute(String name, Class type);

	 PluralPersistentAttribute getPluralAttribute(String name);

	@Override
	 BagPersistentAttribute getCollection(String name, Class elementType);

	@Override
	default  CollectionAttribute getDeclaredCollection(
			String name, Class elementType) {
		return null;
	}

	@Override
	default  SetAttribute getSet(String name, Class elementType) {
		return null;
	}

	@Override
	default  SetAttribute getDeclaredSet(String name, Class elementType) {
		return null;
	}

	@Override
	default  ListAttribute getList(String name, Class elementType) {
		return null;
	}

	@Override
	default  ListAttribute getDeclaredList(String name, Class elementType) {
		return null;
	}

	@Override
	default  MapAttribute getMap(
			String name, Class keyType, Class valueType) {
		return null;
	}

	@Override
	default  MapAttribute getDeclaredMap(
			String name, Class keyType, Class valueType) {
		return null;
	}

	@Override
	default SingularAttribute getSingularAttribute(String name) {
		return null;
	}

	@Override
	default SingularAttribute getDeclaredSingularAttribute(String name) {
		return null;
	}

	@Override
	default CollectionAttribute getCollection(String name) {
		return null;
	}

	@Override
	default CollectionAttribute getDeclaredCollection(String name) {
		return null;
	}

	@Override
	default SetPersistentAttribute getSet(String name) {
		return null;
	}

	@Override
	default SetPersistentAttribute getDeclaredSet(String name) {
		return null;
	}

	@Override
	default ListPersistentAttribute getList(String name) {
		return null;
	}

	@Override
	default ListPersistentAttribute getDeclaredList(String name) {
		return null;
	}

	@Override
	default MapPersistentAttribute getMap(String name) {
		return null;
	}

	@Override
	default MapPersistentAttribute getDeclaredMap(String name) {
		return null;
	}
}