Class DefaultTableGenerator


  • public class DefaultTableGenerator
    extends Object
    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.
    Since:
    Oracle TopLink 10.1.3
    Author:
    King Wang
    • Field Detail

      • databasePlatform

        protected DatabasePlatform databasePlatform
        the target database platform.
      • tableMap

        protected Map<String,​TableDefinition> tableMap
        Used to track the table definition: keyed by the table name, and valued by the table definition object.
      • fieldMap

        protected Map<DatabaseField,​FieldDefinition> fieldMap
        Used to track the field definition: keyed by the database field object, and valued by the field definition.
      • generateFKConstraints

        protected boolean generateFKConstraints
        When this flag is 'false' EclipseLink will not attempt to create fk constraints.
    • Constructor Detail

      • DefaultTableGenerator

        public DefaultTableGenerator​(Project project)
        Default constructor
      • DefaultTableGenerator

        public DefaultTableGenerator​(Project project,
                                     boolean generateFKConstraints)
        This constructor will create a DefaultTableGenerator that can be set to create fk constraints
    • Method Detail

      • generateDefaultTableCreator

        public TableCreator generateDefaultTableCreator()
        Generate a default TableCreator object from the EclipseLink project object.
      • generateFilteredDefaultTableCreator

        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.
        Throws:
        DatabaseException
      • initTableSchema

        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.
      • postInitTableSchema

        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
      • buildDirectCollectionTableDefinition

        protected void buildDirectCollectionTableDefinition​(DirectCollectionMapping mapping,
                                                            ClassDescriptor descriptor)
        Build direct collection table definitions in a EclipseLink descriptor
      • resetFieldTypeForLOB

        protected void resetFieldTypeForLOB​(DirectToFieldMapping mapping)
        Reset field type to use BLOB/CLOB with type conversion mapping fix for 4k oracle thin driver bug.
      • resetTransformedFieldType

        protected void resetTransformedFieldType​(TransformationMapping mapping)
        Reset the transformation mapping field types
      • createAggregateTargetTable

        protected void createAggregateTargetTable​(AggregateCollectionMapping mapping)
        Add the foreign key to the aggregate collection mapping target table. Also add listOrderField if specified.
      • addForeignKeyFieldToSourceTargetTable

        protected void addForeignKeyFieldToSourceTargetTable​(OneToOneMapping mapping)
      • addForeignKeyFieldToSourceTargetTable

        protected void addForeignKeyFieldToSourceTargetTable​(OneToManyMapping mapping)
      • addForeignMappingFkConstraint

        protected void addForeignMappingFkConstraint​(Map<DatabaseField,​DatabaseField> srcFields,
                                                     boolean cascadeOnDelete)
      • getTableDefFromDBTable

        protected TableDefinition getTableDefFromDBTable​(DatabaseTable databaseTable)
        Build a table definition object from a database table object
      • resolveDatabaseField

        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.
      • getFieldDefFromDBField

        protected FieldDefinition getFieldDefFromDBField​(DatabaseField dbField)
        Build a field definition object from a database field.
      • setFieldToRelationTable

        protected void setFieldToRelationTable​(DatabaseField dbField,
                                               TableDefinition table)
        Build and add a field definition object to relation table
      • processAdditionalTablePkFields

        protected void processAdditionalTablePkFields​(ClassDescriptor descriptor)
      • addForeignKeyConstraint

        protected void addForeignKeyConstraint​(TableDefinition sourceTableDef,
                                               TableDefinition targetTableDef,
                                               List<String> fkFields,
                                               List<String> targetFields,
                                               boolean cascadeOnDelete)
        Add a foreign key constraint to the source table.