Jump to: navigation, search

Difference between revisions of "EclipseLink/UserGuide/JPA/Advanced JPA Development/Schema Generation/CascadeOnDelete"

m
Line 15: Line 15:
 
ON DELETE CASCADE is a database foreign key constraint option that automatically removes the dependent rows.  
 
ON DELETE CASCADE is a database foreign key constraint option that automatically removes the dependent rows.  
  
Use the <tt>@CascadeOnDelete</tt> annotation or the <tt>cascadeOnDelete</tt> property to specify that a delete operation performed on a database object is cascaded on secondary or related tables.  
+
Use the <tt>@CascadeOnDelete</tt> annotation or the <tt>cascade-on-delete</tt> XML element to specify that a delete operation performed on a database object is cascaded on secondary or related tables.  
  
 
{| cellpadding="2" border="1"
 
{| cellpadding="2" border="1"
Line 35: Line 35:
 
| The deletion of the join table is cascaded on the database. (Target objects cannot be cascaded even if private because of constraint direction).
 
| The deletion of the join table is cascaded on the database. (Target objects cannot be cascaded even if private because of constraint direction).
 
|-
 
|-
| DirectCollection
+
| ElementCollection
| The deletion of the direct table is cascaded on the database.
+
| The deletion of the collection table is cascaded on the database.
|-
+
| AggregateCollection
+
| The deletion of the aggregate table is cascaded on the database.
+
 
|}
 
|}
  
Line 48: Line 45:
 
</source>  
 
</source>  
  
Cascading deletions behave as follows:
+
Usage of @CascadeOnDelete has the following behavior:
 
+
* Automatic DDL generation sets the <tt>onDeleteCascade</tt> flag on the <tt>ForeignKeyDefinition</tt> based on the mapping.
+
 
+
* <tt>DeleteObject</tt> and <tt>DeleteAll</tt> queries check the descriptor and only delete from the first table if cascaded.
+
 
+
* <tt>DirectCollection</tt>, <tt>AggregateCollection</tt> and <tt>ManyToMany</tt> do not execute the delete SQL, if cascaded.
+
  
* <tt>OneToOne</tt> and <tt>OneToMany</tt> mappings record their dependencies as having been a delete on the database in the Unit of Work. Deletion then checks this to prevent executing the SQL. Note that <tt>DeleteObject</tt> queries still execute as normal, except that no SQL will be executed.  
+
* DDL generation : if DDL generation is used, the generated constraint will include the cascade deletion option.
 +
* Entity : Remove will not execute SQL for deletion from secondary or joined inheritance tables (as constraint will handle deletion).
 +
* OneToOne : If the mapping uses cascading or orphanRemoval, SQL will not be executed to delete target object.
 +
* OneToMany : If the mapping uses cascading or orphanRemoval, SQL will not be executed to delete target objects.
 +
* ManyToMany : SQL will not be executed to delete from the join table.
 +
* ElementCollection : SQL will not be executed to delete from the collection table.
  
 
= Configuration File  =
 
= Configuration File  =

Revision as of 13:36, 1 February 2011

EclipseLink JPA

link="http://wiki.eclipse.org/EclipseLink"
EclipseLink
Website
Download
Community
Mailing ListForumsIRC
Bugzilla
Open
Help Wanted
Bug Day
Contribute
Browse Source

Elug api package icon.png Key API CascadeOnDelete


@CascadeOnDelete

>>>>>> THIS PAGE IS IN PROGRESS. PLEASE SEE DISCUSSION PAGE. <<<<<<

ON DELETE CASCADE is a database foreign key constraint option that automatically removes the dependent rows.

Use the @CascadeOnDelete annotation or the cascade-on-delete XML element to specify that a delete operation performed on a database object is cascaded on secondary or related tables.

CascadeOnDelete
Performing a CascadeOnDelete on this object... Does this...
Entity Defines that secondary or joined inheritance tables should cascade the delete on the database
OneToOne mapping The deletion of the related object is cascaded on the database. This is only allowed for mappedBy/target-foriegn key OneToOne mappings (because of constraint direction).
OneToMany mapping The deletion of the related objects is cascaded on the database.
ManyToMany mapping The deletion of the join table is cascaded on the database. (Target objects cannot be cascaded even if private because of constraint direction).
ElementCollection The deletion of the collection table is cascaded on the database.

@Target(value={METHOD,FIELD,TYPE})
@Retention(value=RUNTIME)
public @interface CascadeOnDelete

Usage of @CascadeOnDelete has the following behavior:

  • DDL generation : if DDL generation is used, the generated constraint will include the cascade deletion option.
  • Entity : Remove will not execute SQL for deletion from secondary or joined inheritance tables (as constraint will handle deletion).
  • OneToOne : If the mapping uses cascading or orphanRemoval, SQL will not be executed to delete target object.
  • OneToMany : If the mapping uses cascading or orphanRemoval, SQL will not be executed to delete target objects.
  • ManyToMany : SQL will not be executed to delete from the join table.
  • ElementCollection : SQL will not be executed to delete from the collection table.

Configuration File

In the orm.xml descriptor file, specify cascade on delete as follows:

<source lang="xml">
<entity cascadeOnDelete="true">
<one-to-one cascadeOnDelete="true">
<one-to-many cascadeOnDelete="true">
<many-to-many cascadeOnDelete="true">
</source>

Eclipselink-logo.gif
Version: 2.2.0 DRAFT
Other versions...