/*
 * 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.persister.entity;
import org.hibernate.sql.SelectFragment;

Extends the generic EntityPersister contract to add operations required by the Hibernate Query Language
Author:Gavin King
/** * Extends the generic <tt>EntityPersister</tt> contract to add * operations required by the Hibernate Query Language * * @author Gavin King */
public interface Queryable extends Loadable, PropertyMapping, Joinable {
Is this an abstract class?
/** * Is this an abstract class? */
public boolean isAbstract();
Is this class explicit polymorphism only?
/** * Is this class explicit polymorphism only? */
public boolean isExplicitPolymorphism();
Get the class that this class is mapped as a subclass of - not necessarily the direct superclass
/** * Get the class that this class is mapped as a subclass of - * not necessarily the direct superclass */
public String getMappedSuperclass();
Get the discriminator value for this particular concrete subclass, as a string that may be embedded in a select statement
/** * Get the discriminator value for this particular concrete subclass, * as a string that may be embedded in a select statement */
public String getDiscriminatorSQLValue();
Given a query alias and an identifying suffix, render the identifier select fragment.
/** * Given a query alias and an identifying suffix, render the identifier select fragment. */
public String identifierSelectFragment(String name, String suffix);
Given a query alias and an identifying suffix, render the property select fragment.
/** * Given a query alias and an identifying suffix, render the property select fragment. */
public String propertySelectFragment(String alias, String suffix, boolean allProperties); public SelectFragment propertySelectFragmentFragment(String alias, String suffix, boolean allProperties);
Get the names of columns used to persist the identifier
/** * Get the names of columns used to persist the identifier */
public String[] getIdentifierColumnNames();
Is the inheritance hierarchy described by this persister contained across multiple tables?
Returns:True if the inheritance hierarchy is spread across multiple tables; false otherwise.
/** * Is the inheritance hierarchy described by this persister contained across * multiple tables? * * @return True if the inheritance hierarchy is spread across multiple tables; false otherwise. */
public boolean isMultiTable();
Get the names of all tables used in the hierarchy (up and down) ordered such that deletes in the given order would not cause constraint violations.
Returns:The ordered array of table names.
/** * Get the names of all tables used in the hierarchy (up and down) ordered such * that deletes in the given order would not cause constraint violations. * * @return The ordered array of table names. */
public String[] getConstraintOrderedTableNameClosure();
For each table specified in getConstraintOrderedTableNameClosure(), get the columns that define the key between the various hierarchy classes.

The first dimension here corresponds to the table indexes returned in getConstraintOrderedTableNameClosure().

The second dimension should have the same length across all the elements in the first dimension. If not, that would be a problem ;)
/** * For each table specified in {@link #getConstraintOrderedTableNameClosure()}, get * the columns that define the key between the various hierarchy classes. * <p/> * The first dimension here corresponds to the table indexes returned in * {@link #getConstraintOrderedTableNameClosure()}. * <p/> * The second dimension should have the same length across all the elements in * the first dimension. If not, that would be a problem ;) * */
public String[][] getContraintOrderedTableKeyColumnClosure();
Given a property name, determine the number of the table which contains the column to which this property is mapped.

Note that this is not relative to the results from getConstraintOrderedTableNameClosure(). It is relative to the subclass table name closure maintained internal to the persister (yick!). It is also relative to the indexing used to resolve getSubclassTableName...
Params:
  • propertyPath – The name of the property.
Returns:The number of the table to which the property is mapped.
/** * Given a property name, determine the number of the table which contains the column * to which this property is mapped. * <p/> * Note that this is <b>not</b> relative to the results from {@link #getConstraintOrderedTableNameClosure()}. * It is relative to the subclass table name closure maintained internal to the persister (yick!). * It is also relative to the indexing used to resolve {@link #getSubclassTableName}... * * @param propertyPath The name of the property. * @return The number of the table to which the property is mapped. */
public int getSubclassPropertyTableNumber(String propertyPath);
Determine whether the given property is declared by our mapped class, our super class, or one of our subclasses...

Note: the method is called 'subclass property...' simply for consistency sake (e.g. getSubclassPropertyTableNumber
Params:
  • propertyPath – The property name.
Returns:The property declarer
/** * Determine whether the given property is declared by our * mapped class, our super class, or one of our subclasses... * <p/> * Note: the method is called 'subclass property...' simply * for consistency sake (e.g. {@link #getSubclassPropertyTableNumber} * * @param propertyPath The property name. * @return The property declarer */
public Declarer getSubclassPropertyDeclarer(String propertyPath);
Get the name of the table with the given index from the internal array.
Params:
  • number – The index into the internal array.
/** * Get the name of the table with the given index from the internal * array. * * @param number The index into the internal array. */
public String getSubclassTableName(int number);
Is the version property included in insert statements?
/** * Is the version property included in insert statements? */
public boolean isVersionPropertyInsertable();
The alias used for any filter conditions (mapped where-fragments or enabled-filters).

This may or may not be different from the root alias depending upon the inheritance mapping strategy.
Params:
  • rootAlias – The root alias
Returns:The alias used for "filter conditions" within the where clause.
/** * The alias used for any filter conditions (mapped where-fragments or * enabled-filters). * </p> * This may or may not be different from the root alias depending upon the * inheritance mapping strategy. * * @param rootAlias The root alias * @return The alias used for "filter conditions" within the where clause. */
public String generateFilterConditionAlias(String rootAlias);
Retrieve the information needed to properly deal with this entity's discriminator in a query.
Returns:The entity discriminator metadata
/** * Retrieve the information needed to properly deal with this entity's discriminator * in a query. * * @return The entity discriminator metadata */
public DiscriminatorMetadata getTypeDiscriminatorMetadata(); String[][] getSubclassPropertyFormulaTemplateClosure(); public static class Declarer { public static final Declarer CLASS = new Declarer( "class" ); public static final Declarer SUBCLASS = new Declarer( "subclass" ); public static final Declarer SUPERCLASS = new Declarer( "superclass" ); private final String name; public Declarer(String name) { this.name = name; } public String toString() { return name; } } }