CascadeOptions.java
package org.codefilarete.stalactite.dsl.property;
/**
* Parent options for one-to-one and one-to-many relation configuration
*
* @author Guillaume Mary
*/
public interface CascadeOptions {
/**
* Specifies relation maintenance mode.
* Default is {@link RelationMode#ALL}
*
* @param relationMode any {@link RelationMode}
* @return the global mapping configurer
*/
CascadeOptions cascading(RelationMode relationMode);
enum RelationMode {
/**
* Will cascade any insert, update or delete order to target entities and any association record if present
* (case of relation not owned by target entities).
* Will not delete orphan, see {@link #ALL_ORPHAN_REMOVAL} for such case.
* It is the default value.
*/
ALL,
/**
* Same as {@link #ALL} but will delete target entities removed from the association (orphans).
*/
ALL_ORPHAN_REMOVAL,
/**
* Relevant only for relations with association table (between source entities and target ones) line one-to-many and many-to-many.
* <strong>If used on cases without association table (one-to-one or one-to-many owned by target), an exception will be thrown at configuration time.</strong>
* <p/>
* Sets target entities as readonly, so only association record will be maintained.
* Useful when an aggregate (Domain Driven Design term) wants to be linked to an entity of another aggregate without modifying it: this mode
* will only manage association table records.
*/
ASSOCIATION_ONLY,
/**
* Declares relation as readonly: no insert, update nor delete will be performed on target entities (nor association records if it exists)
*/
READ_ONLY
}
}