Package org.apache.openjpa.jdbc.meta
Class ReverseMappingTool
java.lang.Object
org.apache.openjpa.jdbc.meta.ReverseMappingTool
- All Implemented Interfaces:
Cloneable
,MetaDataModes
Reverse-maps a schema into class mappings and the associated java
code. Generates a Java code files for persistent classes and associated
identity classes and metadata.
- Author:
- Abe White
-
Nested Class Summary
-
Field Summary
Modifier and TypeFieldDescriptionstatic final String
Access type for generated source, defaults to field-based access.static final String
static final String
static final String
static final String
static final int
Association table.static final int
Primary table for a new base class.static final int
Unmapped table.static final int
Secondary table of an existing class.static final int
Secondary table of an existing class.static final int
Subclass table.Fields inherited from interface org.apache.openjpa.meta.MetaDataModes
MODE_ALL, MODE_ANN_MAPPING, MODE_MAPPING, MODE_MAPPING_INIT, MODE_META, MODE_NONE, MODE_QUERY
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
Add existing unique constraints and indexes to the given value.void
addJoinConstraints
(FieldMapping field) Add existing unique constraints and indexes to the given field's join.void
clone()
Return a new tool with the same settings as this one.generateClass
(String name, Class parent) Generate a new class with the given name.Whether to use field or property-based access on generated code.getAnnotationsForMeta
(Object meta) Returns a list of stringified annotations for specified meta.boolean
Whether to reverse-map blob columns as containing serialized Java objects, rather than the default of using a byte[] field.getClassMapping
(Table table) Return the class mapping for the given table, or null if none.The code formatter for the generated Java code.Return the configuration provided on construction.Return the customizer in use, or null if none.boolean
Whether to make generated classes detachable.The file to output the generated code to, or null for the current directory.Default discriminator strategy for base class mappings.getFieldName
(String name, ClassMapping dec) Return a default Java identifier-formatted name for the given column/table name.getFieldType
(Column col, boolean forceObject) Return the default field type for the given column.boolean
Whether to generate annotations along with generated code.Suffix used to create application identity class name from a class name, or in the case of inner identity classes, the inner class name.boolean
Whether or not to generate inner classes when creating application identity classes.boolean
Whether to generate inverse 1-many/1-1 relations for all many-1/1-1 relations.getLog()
Return the log to write to.Return the generated mappings.boolean
Return whether even nullable columns will be mapped to wrappers rather than primitives.Return the default package for the generated classes, or null if unset.boolean
Return true if join tables are allowed to have primary keys, false if all primary key tables will be mapped as persistent classes.Return the mapping repository used to hold generated mappings.Return the schema group to reverse map.Map of JDBC-name to Java-type-name entries that allows customization of reverse mapping columns to field types.getUniqueForeignKey
(Table table) If the given table has a single unique foreign key or a foreign key that matches the primary key, return it.boolean
Whether to use built in identity classes when possible.boolean
Whether to use datastore identity when possible.boolean
Return whether the foreign key name will be used to generate relation names.boolean
Whether to use generic collections on one-to-many and many-to-many relations instead of untyped collections.boolean
Returns whether or not the schema name will be included in the @Table annotation within the generated class for each table, as well as the corresponding XML mapping files.boolean
Return true if the schema name will be included in the generated class name for each table.Default version strategy for base class mappings.boolean
isBaseTable
(Table table) Return whether the given table is a base class table.boolean
isUnique
(ForeignKey fk) Return whether the given foreign key is unique.static void
Usage: java org.apache.openjpa.jdbc.meta.ReverseMappingTool [option]* <.schema file or resource>* Where the following options are recognized.newClassMapping
(Class cls, Table table) Create a new class to be mapped to a table.newFieldMapping
(String name, Class type, Column col, ForeignKey fk, ClassMapping dec) Create a field mapping for the given info, or return null if customizer rejects.protected static ReverseMappingTool
newInstance
(JDBCConfiguration conf) UsesCodeGenerator
s to write the Java code for the generated mappings to the proper packages.recordCode
(Map<Class<?>, String> output) Write the code for the tool.recordMetaData
(boolean perClass) Write the generated metadata to the proper packages.recordMetaData
(boolean perClass, Map output) Write the code for the tool.void
run()
Generate mappings and class code for the current schema group.static void
run
(JDBCConfiguration conf, String[] args, ReverseMappingTool.Flags flags, ClassLoader loader) Run the tool.static void
run
(JDBCConfiguration conf, String[] args, ReverseMappingTool.Flags flags, ClassLoader loader, Map<Class<?>, String> output) Run the tool and write to the optionally provided mapstatic boolean
run
(JDBCConfiguration conf, String[] args, Options opts) Run the tool.static boolean
Run the tool and write to the optionally provided map.void
setAccessType
(String accessType) Whether to use field or property-based access on generated code.void
setBlobAsObject
(boolean blobAsObj) Whether to reverse-map blob columns as containing serialized Java objects, rather than the default of using a byte[] field.void
setCodeFormat
(CodeFormat format) Set the code formatter for the generated Java code.void
setCustomizer
(ReverseCustomizer customizer) Set the customizer.void
setDetachable
(boolean detachable) Whether to make generated classes detachable.void
setDirectory
(File dir) The file to output the generated code to, or null for the current directory.void
setDiscriminatorStrategy
(String discStrat) Default discriminator strategy for base class mappings.void
setGenerateAnnotations
(boolean genAnnotations) Whether to generate annotations along with generated code.void
setIdentityClassSuffix
(String suffix) Suffix used to create application identity class name from a class name, or in the case of inner identity classes, the inner class name.void
setInnerIdentityClasses
(boolean inner) Whether or not to generate inner classes when creating application identity classes.void
setInverseRelations
(boolean inverse) Whether to generate inverse 1-many/1-1 relations for all many-1/1-1 relations.void
setNullableAsObject
(boolean nullAsObj) Set whether even nullable columns will be mapped to wrappers rather than primitives.void
setPackageName
(String packageName) Set the default package for the generated classes; use null to indicate no package.void
setPrimaryKeyOnJoin
(boolean pkOnJoin) Set to true if join tables are allowed to have primary keys, false if all primary key tables will be mapped as persistent classes.void
setRepository
(MappingRepository repos) Set the repository to use.void
setSchemaGroup
(SchemaGroup schema) Set the schema to reverse map.void
setTypeMap
(Properties typeMap) Map of JDBC-name to Java-type-name entries that allows customization of reverse mapping columns to field types.void
setUseBuiltinIdentityClass
(boolean builtin) Whether to use built in identity classes when possible.void
setUseDataStoreIdentity
(boolean datastore) Whether to use datastore identity when possible.void
setUseForeignKeyName
(boolean useFK) Set whether the foreign key name will be used to generate relation names.void
setUseGenericCollections
(boolean useGenericCollections) Whether to use generic collections on one-to-many and many-to-many relations instead of untyped collections.void
setUseSchemaElement
(boolean useSchemaElement) Sets whether or not the schema name will be included in the @Table annotation within the generated class for each table, as well as the corresponding XML mapping files.void
setUseSchemaName
(boolean useSchema) Set whether the schema name will be included in the generated class name for each table.void
setVersionStrategy
(String versionStrat) Default version strategy for base class mappings.
-
Field Details
-
TABLE_NONE
public static final int TABLE_NONEUnmapped table.- See Also:
-
TABLE_BASE
public static final int TABLE_BASEPrimary table for a new base class.- See Also:
-
TABLE_SECONDARY
public static final int TABLE_SECONDARYSecondary table of an existing class. There is exactly one row in this table for each row in the primary table.- See Also:
-
TABLE_SECONDARY_OUTER
public static final int TABLE_SECONDARY_OUTERSecondary table of an existing class. There is zero or one row in this table for each row in the primary table.- See Also:
-
TABLE_ASSOCIATION
public static final int TABLE_ASSOCIATIONAssociation table.- See Also:
-
TABLE_SUBCLASS
public static final int TABLE_SUBCLASSSubclass table.- See Also:
-
LEVEL_NONE
- See Also:
-
LEVEL_PACKAGE
- See Also:
-
LEVEL_CLASS
- See Also:
-
ACCESS_TYPE_FIELD
Access type for generated source, defaults to field-based access.- See Also:
-
ACCESS_TYPE_PROPERTY
- See Also:
-
-
Constructor Details
-
ReverseMappingTool
Constructor. Supply configuration.
-
-
Method Details
-
getConfiguration
Return the configuration provided on construction. -
getLog
Return the log to write to. -
getPackageName
Return the default package for the generated classes, or null if unset. -
setPackageName
Set the default package for the generated classes; use null to indicate no package. -
getDirectory
The file to output the generated code to, or null for the current directory. If the directory matches the package, it will be used. Otherwise, the package structure will be created under this directory. -
setDirectory
The file to output the generated code to, or null for the current directory. If the directory matches the package, it will be used. Otherwise, the package structure will be created under this directory. -
getUseSchemaName
public boolean getUseSchemaName()Return true if the schema name will be included in the generated class name for each table. Defaults to false. -
setUseSchemaName
public void setUseSchemaName(boolean useSchema) Set whether the schema name will be included in the generated class name for each table. Defaults to false. -
getUseForeignKeyName
public boolean getUseForeignKeyName()Return whether the foreign key name will be used to generate relation names. Defaults to false. -
setUseForeignKeyName
public void setUseForeignKeyName(boolean useFK) Set whether the foreign key name will be used to generate relation names. Defaults to false. -
getNullableAsObject
public boolean getNullableAsObject()Return whether even nullable columns will be mapped to wrappers rather than primitives. Defaults to false. -
setNullableAsObject
public void setNullableAsObject(boolean nullAsObj) Set whether even nullable columns will be mapped to wrappers rather than primitives. Defaults to false. -
getBlobAsObject
public boolean getBlobAsObject()Whether to reverse-map blob columns as containing serialized Java objects, rather than the default of using a byte[] field. -
setBlobAsObject
public void setBlobAsObject(boolean blobAsObj) Whether to reverse-map blob columns as containing serialized Java objects, rather than the default of using a byte[] field. -
getUseGenericCollections
public boolean getUseGenericCollections()Whether to use generic collections on one-to-many and many-to-many relations instead of untyped collections. -
setUseGenericCollections
public void setUseGenericCollections(boolean useGenericCollections) Whether to use generic collections on one-to-many and many-to-many relations instead of untyped collections. -
getTypeMap
Map of JDBC-name to Java-type-name entries that allows customization of reverse mapping columns to field types. -
setTypeMap
Map of JDBC-name to Java-type-name entries that allows customization of reverse mapping columns to field types. -
getPrimaryKeyOnJoin
public boolean getPrimaryKeyOnJoin()Return true if join tables are allowed to have primary keys, false if all primary key tables will be mapped as persistent classes. Defaults to false. -
setPrimaryKeyOnJoin
public void setPrimaryKeyOnJoin(boolean pkOnJoin) Set to true if join tables are allowed to have primary keys, false if all primary key tables will be mapped as persistent classes. Defaults to false. -
getUseDataStoreIdentity
public boolean getUseDataStoreIdentity()Whether to use datastore identity when possible. Defaults to false. -
setUseDataStoreIdentity
public void setUseDataStoreIdentity(boolean datastore) Whether to use datastore identity when possible. Defaults to false. -
getUseBuiltinIdentityClass
public boolean getUseBuiltinIdentityClass()Whether to use built in identity classes when possible. Defaults to true. -
setUseBuiltinIdentityClass
public void setUseBuiltinIdentityClass(boolean builtin) Whether to use built in identity classes when possible. Defaults to true. -
getInnerIdentityClasses
public boolean getInnerIdentityClasses()Whether or not to generate inner classes when creating application identity classes. -
setInnerIdentityClasses
public void setInnerIdentityClasses(boolean inner) Whether or not to generate inner classes when creating application identity classes. -
getIdentityClassSuffix
Suffix used to create application identity class name from a class name, or in the case of inner identity classes, the inner class name. -
setIdentityClassSuffix
Suffix used to create application identity class name from a class name, or in the case of inner identity classes, the inner class name. -
getInverseRelations
public boolean getInverseRelations()Whether to generate inverse 1-many/1-1 relations for all many-1/1-1 relations. Defaults to true. -
setInverseRelations
public void setInverseRelations(boolean inverse) Whether to generate inverse 1-many/1-1 relations for all many-1/1-1 relations. Defaults to true. -
getDetachable
public boolean getDetachable()Whether to make generated classes detachable. Defaults to false. -
setDetachable
public void setDetachable(boolean detachable) Whether to make generated classes detachable. Defaults to false. -
getDiscriminatorStrategy
Default discriminator strategy for base class mappings. -
setDiscriminatorStrategy
Default discriminator strategy for base class mappings. -
getVersionStrategy
Default version strategy for base class mappings. -
setVersionStrategy
Default version strategy for base class mappings. -
getGenerateAnnotations
public boolean getGenerateAnnotations()Whether to generate annotations along with generated code. Defaults to false. -
setGenerateAnnotations
public void setGenerateAnnotations(boolean genAnnotations) Whether to generate annotations along with generated code. Defaults to false. -
getAccessType
Whether to use field or property-based access on generated code. Defaults to field-based access. -
setAccessType
Whether to use field or property-based access on generated code. Defaults to field-based access. -
getCodeFormat
The code formatter for the generated Java code. -
setCodeFormat
Set the code formatter for the generated Java code. -
getCustomizer
Return the customizer in use, or null if none. -
setCustomizer
Set the customizer. The configuration on the customizer, if any, should already be set. -
getUseSchemaElement
public boolean getUseSchemaElement()Returns whether or not the schema name will be included in the @Table annotation within the generated class for each table, as well as the corresponding XML mapping files. The initialized value is true (in order to preserve backwards compatibility). -
setUseSchemaElement
public void setUseSchemaElement(boolean useSchemaElement) Sets whether or not the schema name will be included in the @Table annotation within the generated class for each table, as well as the corresponding XML mapping files. -
getRepository
Return the mapping repository used to hold generated mappings. You can also use the repository to seed the schema group to generate classes from. -
setRepository
Set the repository to use. -
getSchemaGroup
Return the schema group to reverse map. If none has been set, the schema will be generated from the database. -
setSchemaGroup
Set the schema to reverse map. -
getMappings
Return the generated mappings. -
run
public void run()Generate mappings and class code for the current schema group. -
recordCode
UsesCodeGenerator
s to write the Java code for the generated mappings to the proper packages.- Returns:
- a list of
File
instances that were written - Throws:
IOException
-
recordCode
Write the code for the tool.- Parameters:
output
- if null, then perform the write directly to the filesystem; otherwise, populate the specified map with keys as the generatedClassMapping
and values as aString
that contains the generated code- Returns:
- a list of
File
instances that were written - Throws:
IOException
-
recordMetaData
Write the generated metadata to the proper packages.- Returns:
- the set of metadata
File
s that were written - Throws:
IOException
-
recordMetaData
Write the code for the tool.- Parameters:
output
- if null, then perform the write directly to the filesystem; otherwise, populate the specified map with keys as the generatedClassMapping
and values as aString
that contains the generated code- Returns:
- the set of metadata
File
s that were written - Throws:
IOException
-
buildAnnotations
public void buildAnnotations() -
getAnnotationsForMeta
Returns a list of stringified annotations for specified meta. -
getClassMapping
Return the class mapping for the given table, or null if none. -
newClassMapping
Create a new class to be mapped to a table. The class will start out with a default application identity class set. -
generateClass
Generate a new class with the given name. If a non-null parent class is given, it will be set as the superclass. -
isUnique
Return whether the given foreign key is unique. -
getUniqueForeignKey
If the given table has a single unique foreign key or a foreign key that matches the primary key, return it. Else return null. -
addJoinConstraints
Add existing unique constraints and indexes to the given field's join. -
addConstraints
Add existing unique constraints and indexes to the given value. -
isBaseTable
Return whether the given table is a base class table. -
newFieldMapping
public FieldMapping newFieldMapping(String name, Class type, Column col, ForeignKey fk, ClassMapping dec) Create a field mapping for the given info, or return null if customizer rejects. -
getFieldName
Return a default Java identifier-formatted name for the given column/table name. -
getFieldType
Return the default field type for the given column. -
clone
Return a new tool with the same settings as this one. Used in workbench. -
newInstance
-
main
Usage: java org.apache.openjpa.jdbc.meta.ReverseMappingTool [option]* <.schema file or resource>* Where the following options are recognized.- -properties/-p <properties file or resource>: The
path or resource name of a OpenJPA properties file containing
information such as the license key data as outlined in
OpenJPAConfiguration
. Optional. - -<property name> <property value>: All bean
properties of the OpenJPA
JDBCConfiguration
can be set by using their names and supplying a value. For example:-licenseKey adslfja83r3lkadf
- -schemas/-s <schemas and tables>: Comma-separated list of schemas and tables to reverse-map.
- -package/-pkg <package name>: The name of the package for all generated classes. Defaults to no package.
- -directory/-d <output directory>: The directory where all generated code should be placed. Defaults to the current directory.
- -useSchemaName/-sn <true/t | false/f>: Set this flag to true to include the schema name as part of the generated class name for each table.
- -useSchemaElement/-se <true/t | false/f>: Set this flag to false to exclude the schema name from the @Table annotation in the generated class for each table. If set to false, the schema name will also be removed from the corresponding XML mapping files (orm.xml) that are generated by the tool. The initialized value is true (in order to preserve backwards compatibility).
- -useForeignKeyName/-fkn <true/t | false/f>: Set this flag to true to use the foreign key name to generate fields representing relations between classes.
- -nullableAsObject/-no <true/t | false/f>: Set to true to make all nullable columns map to object types; columns that would normally map to a primitive will map to the appropriate wrapper type instead.
- -blobAsObject/-bo <true/t | false/f>: Set to true to make all binary columns map to Object rather than byte[].
- -useGenericCollections/-gc <true/t | false/f>: Set to true to use generic collections on OneToMany and ManyToMany relations (requires JDK 1.5 or higher).
- -typeMap/-typ <types>: Default mapping of SQL type names to Java classes.
- -primaryKeyOnJoin/-pkj <true/t | false/f>: Set to true to allow primary keys on join tables.
- -useDatastoreIdentity/-ds <true/t | false/f>: Set to true to use datastore identity where possible.
- -useBuiltinIdentityClass/-bic <true/t | false/f>: Set to false to never use OpenJPA's builtin application identity classes.
- -innerIdentityClasses/-inn <true/t | false/f>: Set to true to generate the application identity classes as inner classes.
- -identityClassSuffix/-is <suffix>: Suffix to append to class names to create identity class name, or for inner identity classes, the inner class name.
- -inverseRelations/-ir <true/t | false/f>: Set to false to prevent the creation of inverse 1-many/1-1 relations for each encountered many-1/1-1 relation.
- -detachable/-det <true/t | false/f>: Set to true to make generated classes detachable.
- -discriminatorStrategy/-ds <strategy>: The default discriminator strategy to place on base classes.
- -versionStrategy/-vs <strategy>: The default version strategy to place on base classes.
- -metadata/-md <class | package | none>: Specify the level the metadata should be generated at. Defaults to generating a single package-level metadata file.
- -annotations/-ann <true/t | false/f>: Set to true to generate JPA annotations in generated code.
- -accessType/-access <field | property>: Change access type for generated annotations. Defaults to field access.
- -customizerClass/-cc <class name>: The full class
name of a
ReverseCustomizer
implementation to use to customize the reverse mapping process. Optional. - -customizerProperties/-cp <properties file or resource> : The path or resource name of a properties file that will be passed to the reverse customizer on initialization. Optional.
- -customizer/-c.<property name> < property value>
: Arguments like this will be used to configure the bean
properties of the
ReverseCustomizer
. - -codeFormat/-cf.<property name> < property value>
: Arguments like this will be used to configure the bean
properties of the internal
CodeFormat
.
- Throws:
IOException
SQLException
- -properties/-p <properties file or resource>: The
path or resource name of a OpenJPA properties file containing
information such as the license key data as outlined in
-
run
public static boolean run(JDBCConfiguration conf, String[] args, Options opts) throws IOException, SQLException Run the tool. Returns false if invalid options were given.- Throws:
IOException
SQLException
- See Also:
-
run
public static boolean run(JDBCConfiguration conf, String[] args, Options opts, Map<Class<?>, String> output) throws IOException, SQLExceptionRun the tool and write to the optionally provided map. Returns false if invalid options were given.- Throws:
IOException
SQLException
- See Also:
-
run
public static void run(JDBCConfiguration conf, String[] args, ReverseMappingTool.Flags flags, ClassLoader loader) throws IOException, SQLException Run the tool.- Throws:
IOException
SQLException
-
run
public static void run(JDBCConfiguration conf, String[] args, ReverseMappingTool.Flags flags, ClassLoader loader, Map<Class<?>, String> output) throws IOException, SQLExceptionRun the tool and write to the optionally provided map- Throws:
IOException
SQLException
-