Java tutorial
/******************************************************************************* * Copyright (c) 2011 - 2013 Oracle Corporation. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Linda DeMichiel - Java Persistence 2.1 * ******************************************************************************/ package javax.persistence; import javax.persistence.metamodel.Attribute; import java.util.List; /** * This type represents a subgraph for an attribute node that * corresponds to a Managed Type. Using this class, an entity subgraph * can be embedded within an EntityGraph. * * @param <T> The type of the attribute. * * @see EntityGraph * @see AttributeNode * @see NamedSubgraph * * @since Java Persistence 2.1 */ public interface Subgraph<T> { /** * Add one or more attribute nodes to the entity graph. * * @param attributeName name of the attribute * @throws IllegalArgumentException if the attribute is not an * attribute of this managed type. * @throws IllegalStateException if the EntityGraph has been * statically defined */ public void addAttributeNodes(String... attributeName); /** * Add one or more attribute nodes to the entity graph. * @param attribute attribute * * @throws IllegalStateException if this EntityGraph has been * statically defined */ public void addAttributeNodes(Attribute<T, ?>... attribute); /** * Add a node to the graph that corresponds to a managed * type. This allows for construction of multi-node entity graphs * that include related managed types. * * @param attribute attribute * @return subgraph for the attribute * @throws IllegalArgumentException if the attribute's target * type is not a managed type * @throws IllegalStateException if the EntityGraph has been * statically defined */ public <X> Subgraph<X> addSubgraph(Attribute<T, X> attribute); /** * Add a node to the graph that corresponds to a managed * type with inheritance. This allows for multiple subclass * subgraphs to be defined for this node of the entity * graph. Subclass subgraphs will automatically include the specified * attributes of superclass subgraphs * * @param attribute attribute * @param type entity subclass * @return subgraph for the attribute * @throws IllegalArgumentException if the attribute's target * type is not a managed type * @throws IllegalStateException if this EntityGraph has been * statically defined */ public <X> Subgraph<? extends X> addSubgraph(Attribute<T, X> attribute, Class<? extends X> type); /** * Add a node to the graph that corresponds to a managed * type. This allows for construction of multi-node entity graphs * that include related managed types. * * @param attributeName name of the attribute * @return subgraph for the attribute * @throws IllegalArgumentException if the attribute is not an * attribute of this managed type. * @throws IllegalArgumentException if the attribute's target * type is not a managed type * @throws IllegalStateException if this EntityGraph has been * statically defined */ public <X> Subgraph<X> addSubgraph(String attributeName); /** * Add a node to the graph that corresponds to a managed * type with inheritance. This allows for multiple subclass * subgraphs to be defined for this node of the entity * graph. Subclass subgraphs will automatically include the * specified attributes of superclass subgraphs * * @param attributeName name of the attribute * @param type entity subclass * @return subgraph for the attribute * @throws IllegalArgumentException if the attribute is not * an attribute of this managed type. * @throws IllegalArgumentException if the attribute's target * type is not a managed type * @throws IllegalStateException if this EntityGraph has been * statically defined */ public <X> Subgraph<X> addSubgraph(String attributeName, Class<X> type); /** * Add a node to the graph that corresponds to a map key * that is a managed type. This allows for construction of * multinode entity graphs that include related managed types. * * @param attribute attribute * @return subgraph for the key attribute * @throws IllegalArgumentException if the attribute's target * type is not a managed type entity * @throws IllegalStateException if this EntityGraph has been * statically defined */ public <X> Subgraph<X> addKeySubgraph(Attribute<T, X> attribute); /** * Add a node to the graph that corresponds to a map key * that is a managed type with inheritance. This allows for * construction of multi-node entity graphs that include related * managed types. Subclass subgraphs will automatically include * the specified attributes of superclass subgraphs * * @param attribute attribute * @param type entity subclass * @return subgraph for the attribute * @throws IllegalArgumentException if the attribute's target * type is not a managed type entity * @throws IllegalStateException if this EntityGraph has been * statically defined */ public <X> Subgraph<? extends X> addKeySubgraph(Attribute<T, X> attribute, Class<? extends X> type); /** * Add a node to the graph that corresponds to a map key * that is a managed type. This allows for construction of * multi-node entity graphs that include related managed types. * * @param attributeName name of the attribute * @return subgraph for the key attribute * @throws IllegalArgumentException if the attribute is not an * attribute of this entity. * @throws IllegalArgumentException if the attribute's target * type is not a managed type * @throws IllegalStateException if this EntityGraph has been * statically defined */ public <X> Subgraph<X> addKeySubgraph(String attributeName); /** * Add a node to the graph that corresponds to a map key * that is a managed type with inheritance. This allows for * construction of multi-node entity graphs that include related * managed types. Subclass subgraphs will include the specified * attributes of superclass subgraphs * * @param attributeName name of the attribute * @param type entity subclass * @return subgraph for the attribute * @throws IllegalArgumentException if the attribute is not an * attribute of this entity. * @throws IllegalArgumentException if the attribute's target * type is not a managed type * @throws IllegalStateException if this EntityGraph has been * statically defined */ public <X> Subgraph<X> addKeySubgraph(String attributeName, Class<X> type); /** * Return the attribute nodes corresponding to the attributes of * this managed type that are included in the subgraph. * @return list of attribute nodes included in the subgraph or * empty List if none have been defined */ public List<AttributeNode<?>> getAttributeNodes(); /** * Return the type for which this subgraph was defined. * @return managed type referenced by the subgraph */ public Class<T> getClassType(); }