blob: 8d3e96de8a615a3e7252583b0f727d14426d7e95 [file] [log] [blame]
/*
* Copyright (c) 2008, 2018 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Linda DeMichiel - Java Persistence 2.1
// Linda DeMichiel - Java Persistence 2.0
package javax.persistence.metamodel;
import java.util.Set;
/**
* Instances of the type <code>ManagedType</code> represent entity, mapped
* superclass, and embeddable types.
*
* @param <X> The represented type.
*
* @since Java Persistence 2.0
*
*/
public interface ManagedType<X> extends Type<X> {
/**
* Return the attributes of the managed type.
* @return attributes of the managed type
*/
Set<Attribute<? super X, ?>> getAttributes();
/**
* Return the attributes declared by the managed type.
* Returns empty set if the managed type has no declared
* attributes.
* @return declared attributes of the managed type
*/
Set<Attribute<X, ?>> getDeclaredAttributes();
/**
* Return the single-valued attribute of the managed
* type that corresponds to the specified name and Java type.
* @param name the name of the represented attribute
* @param type the type of the represented attribute
* @return single-valued attribute with given name and type
* @throws IllegalArgumentException if attribute of the given
* name and type is not present in the managed type
*/
<Y> SingularAttribute<? super X, Y> getSingularAttribute(String name, Class<Y> type);
/**
* Return the single-valued attribute declared by the
* managed type that corresponds to the specified name and
* Java type.
* @param name the name of the represented attribute
* @param type the type of the represented attribute
* @return declared single-valued attribute of the given
* name and type
* @throws IllegalArgumentException if attribute of the given
* name and type is not declared in the managed type
*/
<Y> SingularAttribute<X, Y> getDeclaredSingularAttribute(String name, Class<Y> type);
/**
* Return the single-valued attributes of the managed type.
* Returns empty set if the managed type has no single-valued
* attributes.
* @return single-valued attributes
*/
Set<SingularAttribute<? super X, ?>> getSingularAttributes();
/**
* Return the single-valued attributes declared by the managed
* type.
* Returns empty set if the managed type has no declared
* single-valued attributes.
* @return declared single-valued attributes
*/
Set<SingularAttribute<X, ?>> getDeclaredSingularAttributes();
/**
* Return the Collection-valued attribute of the managed type
* that corresponds to the specified name and Java element type.
* @param name the name of the represented attribute
* @param elementType the element type of the represented
* attribute
* @return CollectionAttribute of the given name and element
* type
* @throws IllegalArgumentException if attribute of the given
* name and type is not present in the managed type
*/
<E> CollectionAttribute<? super X, E> getCollection(String name, Class<E> elementType);
/**
* Return the Collection-valued attribute declared by the
* managed type that corresponds to the specified name and Java
* element type.
* @param name the name of the represented attribute
* @param elementType the element type of the represented
* attribute
* @return declared <code>CollectionAttribute</code> of the given name and
* element type
* @throws IllegalArgumentException if attribute of the given
* name and type is not declared in the managed type
*/
<E> CollectionAttribute<X, E> getDeclaredCollection(String name, Class<E> elementType);
/**
* Return the Set-valued attribute of the managed type that
* corresponds to the specified name and Java element type.
* @param name the name of the represented attribute
* @param elementType the element type of the represented
* attribute
* @return SetAttribute of the given name and element type
* @throws IllegalArgumentException if attribute of the given
* name and type is not present in the managed type
*/
<E> SetAttribute<? super X, E> getSet(String name, Class<E> elementType);
/**
* Return the Set-valued attribute declared by the managed type
* that corresponds to the specified name and Java element type.
* @param name the name of the represented attribute
* @param elementType the element type of the represented
* attribute
* @return declared SetAttribute of the given name and
* element type
* @throws IllegalArgumentException if attribute of the given
* name and type is not declared in the managed type
*/
<E> SetAttribute<X, E> getDeclaredSet(String name, Class<E> elementType);
/**
* Return the List-valued attribute of the managed type that
* corresponds to the specified name and Java element type.
* @param name the name of the represented attribute
* @param elementType the element type of the represented
* attribute
* @return ListAttribute of the given name and element type
* @throws IllegalArgumentException if attribute of the given
* name and type is not present in the managed type
*/
<E> ListAttribute<? super X, E> getList(String name, Class<E> elementType);
/**
* Return the List-valued attribute declared by the managed
* type that corresponds to the specified name and Java
* element type.
* @param name the name of the represented attribute
* @param elementType the element type of the represented
* attribute
* @return declared ListAttribute of the given name and
* element type
* @throws IllegalArgumentException if attribute of the given
* name and type is not declared in the managed type
*/
<E> ListAttribute<X, E> getDeclaredList(String name, Class<E> elementType);
/**
* Return the Map-valued attribute of the managed type that
* corresponds to the specified name and Java key and value
* types.
* @param name the name of the represented attribute
* @param keyType the key type of the represented attribute
* @param valueType the value type of the represented attribute
* @return MapAttribute of the given name and key and value
* types
* @throws IllegalArgumentException if attribute of the given
* name and type is not present in the managed type
*/
<K, V> MapAttribute<? super X, K, V> getMap(String name,
Class<K> keyType,
Class<V> valueType);
/**
* Return the Map-valued attribute declared by the managed
* type that corresponds to the specified name and Java key
* and value types.
* @param name the name of the represented attribute
* @param keyType the key type of the represented attribute
* @param valueType the value type of the represented attribute
* @return declared MapAttribute of the given name and key
* and value types
* @throws IllegalArgumentException if attribute of the given
* name and type is not declared in the managed type
*/
<K, V> MapAttribute<X, K, V> getDeclaredMap(String name,
Class<K> keyType,
Class<V> valueType);
/**
* Return all multi-valued attributes (Collection-, Set-,
* List-, and Map-valued attributes) of the managed type.
* Returns empty set if the managed type has no multi-valued
* attributes.
* @return Collection-, Set-, List-, and Map-valued attributes
*/
Set<PluralAttribute<? super X, ?, ?>> getPluralAttributes();
/**
* Return all multi-valued attributes (Collection-, Set-,
* List-, and Map-valued attributes) declared by the
* managed type.
* Returns empty set if the managed type has no declared
* multi-valued attributes.
* @return declared Collection-, Set-, List-, and Map-valued
* attributes
*/
Set<PluralAttribute<X, ?, ?>> getDeclaredPluralAttributes();
//String-based:
/**
* Return the attribute of the managed
* type that corresponds to the specified name.
* @param name the name of the represented attribute
* @return attribute with given name
* @throws IllegalArgumentException if attribute of the given
* name is not present in the managed type
*/
Attribute<? super X, ?> getAttribute(String name);
/**
* Return the attribute declared by the managed
* type that corresponds to the specified name.
* @param name the name of the represented attribute
* @return attribute with given name
* @throws IllegalArgumentException if attribute of the given
* name is not declared in the managed type
*/
Attribute<X, ?> getDeclaredAttribute(String name);
/**
* Return the single-valued attribute of the managed type that
* corresponds to the specified name.
* @param name the name of the represented attribute
* @return single-valued attribute with the given name
* @throws IllegalArgumentException if attribute of the given
* name is not present in the managed type
*/
SingularAttribute<? super X, ?> getSingularAttribute(String name);
/**
* Return the single-valued attribute declared by the managed
* type that corresponds to the specified name.
* @param name the name of the represented attribute
* @return declared single-valued attribute of the given
* name
* @throws IllegalArgumentException if attribute of the given
* name is not declared in the managed type
*/
SingularAttribute<X, ?> getDeclaredSingularAttribute(String name);
/**
* Return the Collection-valued attribute of the managed type
* that corresponds to the specified name.
* @param name the name of the represented attribute
* @return CollectionAttribute of the given name
* @throws IllegalArgumentException if attribute of the given
* name is not present in the managed type
*/
CollectionAttribute<? super X, ?> getCollection(String name);
/**
* Return the Collection-valued attribute declared by the
* managed type that corresponds to the specified name.
* @param name the name of the represented attribute
* @return declared CollectionAttribute of the given name
* @throws IllegalArgumentException if attribute of the given
* name is not declared in the managed type
*/
CollectionAttribute<X, ?> getDeclaredCollection(String name);
/**
* Return the Set-valued attribute of the managed type that
* corresponds to the specified name.
* @param name the name of the represented attribute
* @return SetAttribute of the given name
* @throws IllegalArgumentException if attribute of the given
* name is not present in the managed type
*/
SetAttribute<? super X, ?> getSet(String name);
/**
* Return the Set-valued attribute declared by the managed type
* that corresponds to the specified name.
* @param name the name of the represented attribute
* @return declared SetAttribute of the given name
* @throws IllegalArgumentException if attribute of the given
* name is not declared in the managed type
*/
SetAttribute<X, ?> getDeclaredSet(String name);
/**
* Return the List-valued attribute of the managed type that
* corresponds to the specified name.
* @param name the name of the represented attribute
* @return ListAttribute of the given name
* @throws IllegalArgumentException if attribute of the given
* name is not present in the managed type
*/
ListAttribute<? super X, ?> getList(String name);
/**
* Return the List-valued attribute declared by the managed
* type that corresponds to the specified name.
* @param name the name of the represented attribute
* @return declared ListAttribute of the given name
* @throws IllegalArgumentException if attribute of the given
* name is not declared in the managed type
*/
ListAttribute<X, ?> getDeclaredList(String name);
/**
* Return the Map-valued attribute of the managed type that
* corresponds to the specified name.
* @param name the name of the represented attribute
* @return MapAttribute of the given name
* @throws IllegalArgumentException if attribute of the given
* name is not present in the managed type
*/
MapAttribute<? super X, ?, ?> getMap(String name);
/**
* Return the Map-valued attribute declared by the managed
* type that corresponds to the specified name.
* @param name the name of the represented attribute
* @return declared MapAttribute of the given name
* @throws IllegalArgumentException if attribute of the given
* name is not declared in the managed type
*/
MapAttribute<X, ?, ?> getDeclaredMap(String name);
}