/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
* indicated by the @author tags or express copyright attribution
* statements applied by the authors. All third-party contributions are
* distributed under license by Red Hat Middleware LLC.
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*
*/
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();
Get the name of the temporary table to be used to (potentially) store id values
when performing bulk update/deletes.
Returns: The appropriate temporary table name.
/**
* Get the name of the temporary table to be used to (potentially) store id values
* when performing bulk update/deletes.
*
* @return The appropriate temporary table name.
*/
public String getTemporaryIdTableName();
Get the appropriate DDL command for generating the temporary table to
be used to (potentially) store id values when performing bulk update/deletes.
Returns: The appropriate temporary table creation command.
/**
* Get the appropriate DDL command for generating the temporary table to
* be used to (potentially) store id values when performing bulk update/deletes.
*
* @return The appropriate temporary table creation command.
*/
public String getTemporaryIdTableDDL();
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;
}
}
}