EclipseLink 1.2.0, build 'v20091016-r5565' API Reference

org.eclipse.persistence.dynamic
Class DynamicTypeBuilder

java.lang.Object
  extended by org.eclipse.persistence.dynamic.DynamicTypeBuilder
Direct Known Subclasses:
JPADynamicTypeBuilder

public class DynamicTypeBuilder
extends java.lang.Object

The EntityTypeBuilder is a factory class for creating and extending dynamic entity types. After being constructed in either usage the application can then use the provided API to customize mapping information of the type.

Author:
dclarke, mnorman
Since:
EclipseLink 1.2

Field Summary
protected  org.eclipse.persistence.internal.dynamic.DynamicTypeImpl entityType
          The type being configured for dynamic use or being created/extended
 
Constructor Summary
DynamicTypeBuilder(java.lang.Class<?> dynamicClass, DynamicType parentType, java.lang.String... tableNames)
          Create an EntityType for a new dynamic type.
DynamicTypeBuilder(DynamicClassLoader dcl, ClassDescriptor descriptor, DynamicType parentType)
          Create an EntityTypeBuilder for an existing descriptor.
 
Method Summary
 AggregateObjectMapping addAggregateObjectMapping(java.lang.String name, DynamicType refType, boolean allowsNull)
          TODO
 DirectCollectionMapping addDirectCollectionMapping(java.lang.String name, java.lang.String targetTable, java.lang.String valueColumn, java.lang.Class<?> valueType, java.lang.String... fkFieldNames)
          TODO
 DirectToFieldMapping addDirectMapping(java.lang.String name, java.lang.Class<?> javaType, java.lang.String fieldName)
          Allows DirectToFieldMapping (@Basic) mapping to be added to a dynamic type through API.
protected  void addDynamicClasses(DynamicClassLoader dcl, java.lang.String className, DynamicType parentType)
          Register a DynamicClassWriter with the provided DynamicClassLoader so that a dynamic class can be generated when needed.
 void addManyToManyMapping(java.lang.String name, DynamicType refType, java.lang.String relationshipTableName)
          TODO
protected  DatabaseMapping addMapping(DatabaseMapping mapping)
          Add the mapping to the types' descriptor.
 OneToManyMapping addOneToManyMapping(java.lang.String name, DynamicType refType, java.lang.String... fkFieldNames)
          TODO
 OneToOneMapping addOneToOneMapping(java.lang.String name, DynamicType refType, java.lang.String... fkFieldNames)
          Allows OneToOneMapping (@OneToOne and @ManyToOne) mappings to be added to a dynamic type through API.
protected  void configure(ClassDescriptor descriptor, java.lang.String... tableNames)
          Initialize a new or existing descriptor configuring the necessary policies as well as
 void configureSequencing(Sequence sequence, java.lang.String numberName, java.lang.String numberFieldName)
           
 void configureSequencing(java.lang.String numberName, java.lang.String numberFieldName)
           
 DynamicType getType()
           
static Project loadDynamicProject(java.io.InputStream resourceStream, DatabaseLogin login, DynamicClassLoader dynamicClassLoader)
          Load a dynamic project from deployment XML creating dynamic types for all descriptors where the provided class name does not exist.
static Project loadDynamicProject(java.lang.String resourcePath, DatabaseLogin login, DynamicClassLoader dynamicClassLoader)
          Load a dynamic project from deployment XML creating dynamic types for all descriptors where the provided class name does not exist.
 void setPrimaryKeyFields(java.lang.String... pkFieldNames)
          Set the PK field names on the underlying descriptor ensuring no duplicate names are added.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

entityType

protected org.eclipse.persistence.internal.dynamic.DynamicTypeImpl entityType
The type being configured for dynamic use or being created/extended

Constructor Detail

DynamicTypeBuilder

public DynamicTypeBuilder(java.lang.Class<?> dynamicClass,
                          DynamicType parentType,
                          java.lang.String... tableNames)
Create an EntityType for a new dynamic type. The contained EntityType and its wrapped descriptor are not automatically added to any session. This must be done by the application after the type's is fully configured.

Creating new type Example: DynamicHelper helper = new DynamicHelper(session); DynamicClassLoader dcl = helper.getDynamicClassLoader();

Class javaType = dcl.creatDynamicClass("model.Simple");

DynamicTypeBuilder typeBuilder = new JPADynamicTypeBuilder(javaType, null, "SIMPLE_TYPE");
typeBuilder.setPrimaryKeyFields("SID");
typeBuilder.addDirectMapping("id", int.class, "SID");
typeBuilder.addDirectMapping("value1", String.class, "VAL_1");
typeBuilder.addDirectMapping("value2", boolean.class, "VAL_2");
typeBuilder.addDirectMapping("value3", Calendar.class, "VAL_3");
typeBuilder.addDirectMapping("value4", Character.class, "VAL_4");

helper.addTypes(true, true, typeBuilder.getType());

Parameters:
dynamicClass -
parentType -
tableNames -

DynamicTypeBuilder

public DynamicTypeBuilder(DynamicClassLoader dcl,
                          ClassDescriptor descriptor,
                          DynamicType parentType)
Create an EntityTypeBuilder for an existing descriptor. This is used

Parameters:
dcl -
descriptor -
parentType - provided since the InheritancePolicy on the descriptor may not have its parent descriptor initialized.
Method Detail

addDynamicClasses

protected void addDynamicClasses(DynamicClassLoader dcl,
                                 java.lang.String className,
                                 DynamicType parentType)
Register a DynamicClassWriter with the provided DynamicClassLoader so that a dynamic class can be generated when needed.


configure

protected void configure(ClassDescriptor descriptor,
                         java.lang.String... tableNames)
Initialize a new or existing descriptor configuring the necessary policies as well as


getType

public DynamicType getType()

setPrimaryKeyFields

public void setPrimaryKeyFields(java.lang.String... pkFieldNames)
Set the PK field names on the underlying descriptor ensuring no duplicate names are added.

Parameters:
pkFieldNames - qualified or unqualified field names

addDirectMapping

public DirectToFieldMapping addDirectMapping(java.lang.String name,
                                             java.lang.Class<?> javaType,
                                             java.lang.String fieldName)
Allows DirectToFieldMapping (@Basic) mapping to be added to a dynamic type through API. This method can be used on a new DynamicTypeImpl that has yet to be added to a session and have its descriptor initialized, or it can be called on an active (initialized) descriptor.

There is no support currently for having the EclipseLink SchemaManager generate ALTER TABLE calls so any new columns expected must be added without the help of EclipseLink or use the SchemaManager.replaceObject(org.eclipse.persistence.tools.schemaframework.DatabaseObjectDefinition) to DROP and CREATE the table. WARNING: This will cause data loss.

Parameters:
javaType - is the type of the attribute. If the type is a primitive it will be converted to the comparable non-primitive type.

addOneToOneMapping

public OneToOneMapping addOneToOneMapping(java.lang.String name,
                                          DynamicType refType,
                                          java.lang.String... fkFieldNames)
Allows OneToOneMapping (@OneToOne and @ManyToOne) mappings to be added to a dynamic type through API. This method can be used on a new DynamicTypeImpl that has yet to be added to a session and have its descriptor initialized, or it can be called on an active (initialized) descriptor.

There is no support currently for having the EclipseLink SchemaManager generate ALTER TABLE calls so any new columns expected must be added without the help of EclipseLink or use the SchemaManager.replaceObject(org.eclipse.persistence.tools.schemaframework.DatabaseObjectDefinition) to DROP and CREATE the table. WARNING: This will cause data loss.


addOneToManyMapping

public OneToManyMapping addOneToManyMapping(java.lang.String name,
                                            DynamicType refType,
                                            java.lang.String... fkFieldNames)
TODO

Parameters:
name -
refType -
fkFieldNames -
Returns:

addDirectCollectionMapping

public DirectCollectionMapping addDirectCollectionMapping(java.lang.String name,
                                                          java.lang.String targetTable,
                                                          java.lang.String valueColumn,
                                                          java.lang.Class<?> valueType,
                                                          java.lang.String... fkFieldNames)
                                                   throws java.lang.IllegalArgumentException
TODO

Parameters:
name -
targetTable -
valueColumn -
valueType -
fkFieldNames -
Returns:
Throws:
java.lang.IllegalArgumentException

addAggregateObjectMapping

public AggregateObjectMapping addAggregateObjectMapping(java.lang.String name,
                                                        DynamicType refType,
                                                        boolean allowsNull)
TODO

Parameters:
name -
refType -
allowsNull -
Returns:

addManyToManyMapping

public void addManyToManyMapping(java.lang.String name,
                                 DynamicType refType,
                                 java.lang.String relationshipTableName)
TODO

Parameters:
name -
refType -
relationshipTableName -

addMapping

protected DatabaseMapping addMapping(DatabaseMapping mapping)
Add the mapping to the types' descriptor. This is where the ValuesAccessor is created and the position of the mapping in the descriptor is captured to use as its index.


configureSequencing

public void configureSequencing(java.lang.String numberName,
                                java.lang.String numberFieldName)

configureSequencing

public void configureSequencing(Sequence sequence,
                                java.lang.String numberName,
                                java.lang.String numberFieldName)

loadDynamicProject

public static Project loadDynamicProject(java.lang.String resourcePath,
                                         DatabaseLogin login,
                                         DynamicClassLoader dynamicClassLoader)
                                  throws java.io.IOException
Load a dynamic project from deployment XML creating dynamic types for all descriptors where the provided class name does not exist.

Parameters:
resourcePath -
login -
dynamicClassLoader -
Returns:
a Project with DynamicClassLoader and associated DynamicClassWriter configured. Ensure if a new Login/Platform is being configured that the ConversionManager.getLoader() is maintained.

null is returned if the resourcePath cannot locate a deployment XML

Throws:
java.io.IOException

loadDynamicProject

public static Project loadDynamicProject(java.io.InputStream resourceStream,
                                         DatabaseLogin login,
                                         DynamicClassLoader dynamicClassLoader)
                                  throws java.io.IOException
Load a dynamic project from deployment XML creating dynamic types for all descriptors where the provided class name does not exist.

Parameters:
resourceStream -
login -
dynamicClassLoader -
Returns:
a Project with DynamicClassLoader and associated DynamicClassWriter configured. Ensure if a new Login/Platform is being configured that the ConversionManager.getLoader() is maintained.

null is returned if the resourcePath cannot locate a deployment XML

Throws:
java.io.IOException

EclipseLink 1.2.0, build 'v20091016-r5565' API Reference