Top Description Fields Constructors Methods
org.eclipse.persistence.tools.schemaframework

public Class DefaultTableGenerator

extends Object
Class Inheritance
Imports
java.sql.DatabaseMetaData, .ResultSet, .SQLException, java.util.ArrayList, .Iterator, .LinkedHashMap, .List, .Map, org.eclipse.persistence.descriptors.ClassDescriptor, org.eclipse.persistence.eis.EISDescriptor, org.eclipse.persistence.exceptions.DatabaseException, .ValidationException, org.eclipse.persistence.internal.databaseaccess.DatabasePlatform, .FieldTypeDefinition, org.eclipse.persistence.internal.descriptors.FieldTransformation, .MethodBasedFieldTransformation, .TransformerBasedFieldTransformation, org.eclipse.persistence.internal.helper.ClassConstants, .ConversionManager, .DatabaseField, .DatabaseTable, .Helper, org.eclipse.persistence.internal.queries.ContainerPolicy, .MappedKeyMapContainerPolicy, org.eclipse.persistence.internal.sessions.AbstractSession, org.eclipse.persistence.logging.AbstractSessionLog, .SessionLog, org.eclipse.persistence.mappings.AggregateCollectionMapping, .DatabaseMapping, .DirectCollectionMapping, .DirectMapMapping, .DirectToFieldMapping, .ForeignReferenceMapping, .ManyToManyMapping, .OneToManyMapping, .OneToOneMapping, .RelationTableMechanism, .TransformationMapping, org.eclipse.persistence.mappings.converters.Converter, .SerializedObjectConverter, .TypeConversionConverter, org.eclipse.persistence.mappings.structures.ObjectRelationalDataTypeDescriptor, org.eclipse.persistence.oxm.XMLDescriptor, org.eclipse.persistence.sequencing.DefaultSequence, .NativeSequence, .Sequence, org.eclipse.persistence.sessions.DatabaseLogin, .Project, .Session, org.eclipse.persistence.sessions.server.ServerSession

DefaultTableGenerator is a utility class used to generate a default table schema for a EclipseLink project object. The utility can be used in EclipseLink CMP for OC4J to perform the table auto creation process, which can be triggered at deployment time when EclipseLink project descriptor is absent (default mapping) or present. The utility can also be used to any EclipseLink application to perform the table drop/creation at runtime. The utility handles all direct/relational mappings, inheritance, multiple tables, interface with/without tables, optimistic version/timestamp lockings, nested relationships, BLOB/CLOB generation. The utility is platform-agnostic. Usage: - CMP 1. set "autocreate-tables=true|false, autodelete-tables=true|false" in oc4j application deployment descriptor files (config/system-application.xml, config/application.xml, or orion-application.xml in an .ear) 2. Default Mapping: the same as CMP, plus system properties setting -Declipselink.defaultmapping.autocreate-tables='true|false' and -Declipselink.defaultmapping.autodelete-tables='true|false' - Non-CMP: 1. Configuration: through sessions.xml 2. Directly runtime call through schema framework: SchemaManager mgr = new SchemaManager(session); mgr.replaceDefaultTables(); //drop and create mgr.createDefaultTables(); //create only The utility currently only supports relational project.
Author
King Wang
Since
Oracle TopLink 10.1.3

Field Summary

Modifier and TypeField and Description
protected Map<DatabaseField, DatabaseField>
databaseFields

DatabaseField pool (synchronized with above 'fieldMap')

protected DatabasePlatform
databasePlatform

the target database platform.

protected Map<DatabaseField, FieldDefinition>
fieldMap

Used to track the field definition: keyed by the database field object, and valued by the field definition.

protected boolean
generateFKConstraints

When this flag is 'false' EclipseLink will not attempt to create fk constraints.

pack-priv Project
project

The project object used to generate the default data schema.

protected Map<String, TableDefinition>
tableMap

Used to track the table definition: keyed by the table name, and valued by the table definition object.

Constructor Summary

AccessConstructor and Description
public
DefaultTableGenerator(Project project)

Default constructor

public
DefaultTableGenerator(Project project, boolean generateFKConstraints)

This constructor will create a DefaultTableGenerator that can be set to create fk constraints

Method Summary

Modifier and TypeMethod and Description
protected void
addFieldsForMappedKeyMapContainerPolicy(ContainerPolicy cp, TableDefinition table)

The ContainerPolicy may contain some additional fields that should be added to the table

protected void
addForeignKeyConstraint(TableDefinition sourceTableDef, TableDefinition targetTableDef, List<String> fkFields, List<String> targetFields, boolean cascadeOnDelete)

Add a foreign key constraint to the source table.

protected void
protected void
protected void
addForeignMappingFkConstraint(final Map<DatabaseField, DatabaseField> srcFields, boolean cascadeOnDelete)

protected void
addJoinColumnsFkConstraint(List<DatabaseField> fkFields, List<DatabaseField> targetFields, boolean cascadeOnDelete)

protected void
addUniqueKeyConstraints(TableDefinition sourceTableDef, Map<String, List<List<String>>> uniqueConstraintsMap)

protected void
buildDirectCollectionTableDefinition(DirectCollectionMapping mapping, ClassDescriptor descriptor)

Build direct collection table definitions in a EclipseLink descriptor

protected void
buildRelationTableDefinition(ForeignReferenceMapping mapping, RelationTableMechanism relationTableMechanism, DatabaseField listOrderField, ContainerPolicy cp)

Build relation table definitions for all many-to-many relationships in a EclipseLink descriptor.

protected void
buildRelationTableFields(ForeignReferenceMapping mapping, TableDefinition table, List<DatabaseField> fkFields, List<DatabaseField> targetFields)

Build field definitions and foreign key constraints for all many-to-many relation table.

protected void
createAggregateTargetTable(AggregateCollectionMapping mapping)

Add the foreign key to the aggregate collection mapping target table.

public TableCreator
generateDefaultTableCreator()

Generate a default TableCreator object from the EclipseLink project object.

public TableCreator
generateFilteredDefaultTableCreator(AbstractSession session)

Generate a default TableCreator object from the EclipseLink project object, and perform the table existence check through jdbc table metadata, and filter out tables which are already in the database.

protected FieldDefinition
getFieldDefFromDBField(DatabaseField dbField)

Build a field definition object from a database field.

protected TableDefinition
getTableDefFromDBTable(DatabaseTable databaseTable)

Build a table definition object from a database table object

protected void
initTableSchema(ClassDescriptor descriptor)

Build tables/fields information into the table creator object from a EclipseLink descriptor.

protected void
postInitTableSchema(ClassDescriptor descriptor)

Build additional table/field definitions for the descriptor, like relation table and direct-collection, direct-map table, as well as reset LOB type for serialized object mapping and type conversion mapping for LOB usage

protected void
protected void
resetFieldTypeForLOB(DirectToFieldMapping mapping)

Reset field type to use BLOB/CLOB with type conversion mapping fix for 4k oracle thin driver bug.

protected void
resetTransformedFieldType(TransformationMapping mapping)

Reset the transformation mapping field types

protected DatabaseField
resolveDatabaseField(DatabaseField childField, DatabaseField parentField)

Resolve the foreign key database field metadata in relation table or direct collection/map table.

protected void
setFieldToRelationTable(DatabaseField dbField, TableDefinition table)

Build and add a field definition object to relation table

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

databaseFieldsback to summary
protected Map<DatabaseField, DatabaseField> databaseFields

DatabaseField pool (synchronized with above 'fieldMap')

databasePlatformback to summary
protected DatabasePlatform databasePlatform

the target database platform.

fieldMapback to summary
protected Map<DatabaseField, FieldDefinition> fieldMap

Used to track the field definition: keyed by the database field object, and valued by the field definition.

generateFKConstraintsback to summary
protected boolean generateFKConstraints

When this flag is 'false' EclipseLink will not attempt to create fk constraints.

projectback to summary
pack-priv Project project

The project object used to generate the default data schema.

tableMapback to summary
protected Map<String, TableDefinition> tableMap

Used to track the table definition: keyed by the table name, and valued by the table definition object.

Constructor Detail

DefaultTableGeneratorback to summary
public DefaultTableGenerator(Project project)

Default constructor

DefaultTableGeneratorback to summary
public DefaultTableGenerator(Project project, boolean generateFKConstraints)

This constructor will create a DefaultTableGenerator that can be set to create fk constraints

Method Detail

addFieldsForMappedKeyMapContainerPolicyback to summary
protected void addFieldsForMappedKeyMapContainerPolicy(ContainerPolicy cp, TableDefinition table)

The ContainerPolicy may contain some additional fields that should be added to the table

See Also
MappedKeyMapContainerPolicy
addForeignKeyConstraintback to summary
protected void addForeignKeyConstraint(TableDefinition sourceTableDef, TableDefinition targetTableDef, List<String> fkFields, List<String> targetFields, boolean cascadeOnDelete)

Add a foreign key constraint to the source table.

addForeignKeyFieldToSourceTargetTableback to summary
protected void addForeignKeyFieldToSourceTargetTable(OneToOneMapping mapping)
addForeignKeyFieldToSourceTargetTableback to summary
protected void addForeignKeyFieldToSourceTargetTable(OneToManyMapping mapping)
addForeignMappingFkConstraintback to summary
protected void addForeignMappingFkConstraint(final Map<DatabaseField, DatabaseField> srcFields, boolean cascadeOnDelete)
addJoinColumnsFkConstraintback to summary
protected void addJoinColumnsFkConstraint(List<DatabaseField> fkFields, List<DatabaseField> targetFields, boolean cascadeOnDelete)
addUniqueKeyConstraintsback to summary
protected void addUniqueKeyConstraints(TableDefinition sourceTableDef, Map<String, List<List<String>>> uniqueConstraintsMap)
buildDirectCollectionTableDefinitionback to summary
protected void buildDirectCollectionTableDefinition(DirectCollectionMapping mapping, ClassDescriptor descriptor)

Build direct collection table definitions in a EclipseLink descriptor

buildRelationTableDefinitionback to summary
protected void buildRelationTableDefinition(ForeignReferenceMapping mapping, RelationTableMechanism relationTableMechanism, DatabaseField listOrderField, ContainerPolicy cp)

Build relation table definitions for all many-to-many relationships in a EclipseLink descriptor.

buildRelationTableFieldsback to summary
protected void buildRelationTableFields(ForeignReferenceMapping mapping, TableDefinition table, List<DatabaseField> fkFields, List<DatabaseField> targetFields)

Build field definitions and foreign key constraints for all many-to-many relation table.

createAggregateTargetTableback to summary
protected void createAggregateTargetTable(AggregateCollectionMapping mapping)

Add the foreign key to the aggregate collection mapping target table. Also add listOrderField if specified.

generateDefaultTableCreatorback to summary
public TableCreator generateDefaultTableCreator()

Generate a default TableCreator object from the EclipseLink project object.

generateFilteredDefaultTableCreatorback to summary
public TableCreator generateFilteredDefaultTableCreator(AbstractSession session) throws DatabaseException

Generate a default TableCreator object from the EclipseLink project object, and perform the table existence check through jdbc table metadata, and filter out tables which are already in the database.

getFieldDefFromDBFieldback to summary
protected FieldDefinition getFieldDefFromDBField(DatabaseField dbField)

Build a field definition object from a database field.

getTableDefFromDBTableback to summary
protected TableDefinition getTableDefFromDBTable(DatabaseTable databaseTable)

Build a table definition object from a database table object

initTableSchemaback to summary
protected void initTableSchema(ClassDescriptor descriptor)

Build tables/fields information into the table creator object from a EclipseLink descriptor. This should handle most of the direct/relational mappings except many-to-many and direct collection/map mappings, which must be down in postInit method.

postInitTableSchemaback to summary
protected void postInitTableSchema(ClassDescriptor descriptor)

Build additional table/field definitions for the descriptor, like relation table and direct-collection, direct-map table, as well as reset LOB type for serialized object mapping and type conversion mapping for LOB usage

processAdditionalTablePkFieldsback to summary
protected void processAdditionalTablePkFields(ClassDescriptor descriptor)
resetFieldTypeForLOBback to summary
protected void resetFieldTypeForLOB(DirectToFieldMapping mapping)

Reset field type to use BLOB/CLOB with type conversion mapping fix for 4k oracle thin driver bug.

resetTransformedFieldTypeback to summary
protected void resetTransformedFieldType(TransformationMapping mapping)

Reset the transformation mapping field types

resolveDatabaseFieldback to summary
protected DatabaseField resolveDatabaseField(DatabaseField childField, DatabaseField parentField)

Resolve the foreign key database field metadata in relation table or direct collection/map table. Those metadata includes type, and maybe dbtype/size/subsize if DatabaseField carries those info.

setFieldToRelationTableback to summary
protected void setFieldToRelationTable(DatabaseField dbField, TableDefinition table)

Build and add a field definition object to relation table