org.sormula.annotation.cascade
Annotation Type OneToManyCascade


@Retention(value=RUNTIME)
@Target(value=FIELD)
public @interface OneToManyCascade

Cascade annotation for a one to many relationship between source row and target row. Insert, update, and delete cascades default to standard primary key operations. Select cascade must be defined since SelectCascade.sourceParameterFieldNames() are not known by default. For more complex cascade relationships, use Cascade.

More than one operation is allowed per field even though it is not likely that you would need more than one. selects(), updates(), inserts(), and deletes() accepts arrays which allow an empty array to mean "do nothing".

Since:
1.0
Author:
Jeff Miller

Required Element Summary
 SelectCascade[] selects
          Select cascade operations that will select target rows.
 
Optional Element Summary
 DeleteCascade[] deletes
          The cascade operations to perform when source row is deleted.
 InsertCascade[] inserts
          The cascade operations to perform when source row is inserted.
 boolean readOnly
          Indicates if cascade should never modify the database.
 SaveCascade[] saves
          The cascade operations to perform when source row is saved.
 java.lang.Class<?> targetClass
          Class type of target field to affect.
 UpdateCascade[] updates
          The cascade operations to perform when source row is updated.
 

Element Detail

selects

public abstract SelectCascade[] selects
Select cascade operations that will select target rows. Typical values would be:

Returns:
select annotations for cascade; use empty array for no select cascade

readOnly

public abstract boolean readOnly
Indicates if cascade should never modify the database. An equivalent to using readOnly=true would be to set inserts={}, updates={}, and deletes={}.

Returns:
true to use only the select operations (never modify); false to cascade all operations
Default:
false

targetClass

public abstract java.lang.Class<?> targetClass
Class type of target field to affect. Used as parameter to Database.getTable(Class) to get table for cascade operation. targetClass() is optional for scalar fields since target class can be obtained from target field at runtime.

For nonscalar target field types, like arrays, Collection types, and Map types, targetClass can be determined from the field. Array types can be determined through Class.getComponentType(). For collections and maps, target class can be determined through the parameterized type with Field.getGenericType() if the generic type is not parameterized. For complex parameterized types, target class must be specified.

The following are examples of fields where targetClass=Something.class is optional in cascade annotations because it can be determined through reflection:

 Something scalar;
 Something[] array;
 List<Something> list;
 Map<String, Something> map;
 

Returns:
class of field that is involved in cascade; Object.class to indicate that class is to be obtained from scalar field at runtime by relfection
Default:
java.lang.Object.class

inserts

public abstract InsertCascade[] inserts
The cascade operations to perform when source row is inserted.

Returns:
insert annotations for cascade; use empty array for no insert cascade
Default:
@org.sormula.annotation.cascade.InsertCascade

updates

public abstract UpdateCascade[] updates
The cascade operations to perform when source row is updated.

Returns:
update annotations for cascade; use empty array for no update cascade
Default:
@org.sormula.annotation.cascade.UpdateCascade

saves

public abstract SaveCascade[] saves
The cascade operations to perform when source row is saved.

Returns:
save annotations for cascade; use empty array for no save cascade
Since:
1.9.3 and 2.3.3
Default:
@org.sormula.annotation.cascade.SaveCascade

deletes

public abstract DeleteCascade[] deletes
The cascade operations to perform when source row is deleted.

Returns:
delete annotations for cascade; use empty array for no delete cascade
Default:
@org.sormula.annotation.cascade.DeleteCascade