Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

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

m
m
Line 42: Line 42:
  
  
Usage of CascadeOnDelete has the following behavior:
+
<tt>@CascadeOnDelete</tt> has the following behavior:
  
 
* DDL generation : If DDL generation is used, the generated constraint will include the cascade deletion option.
 
* DDL generation : If DDL generation is used, the generated constraint will include the cascade deletion option.
Line 55: Line 55:
 
* Cascading : The remove operation should still be configured to cascade in the mapping if using CascadeOnDelete.
 
* Cascading : The remove operation should still be configured to cascade in the mapping if using CascadeOnDelete.
  
== Configuration File  ==
 
In the <tt>orm.xml</tt> descriptor file, specify cascade on delete as follows:
 
<source lang="xml">
 
<cascade-on-delete>true</cascade-on-delete>
 
</source>
 
  
== ''Usage of @CascadeOnDelete Annotation ==
+
== ''@CascadeOnDelete Example==
 
<source lang="java">
 
<source lang="java">
 
@Entity
 
@Entity
Line 85: Line 80:
 
     ...
 
     ...
 
}
 
}
 +
</source>
 +
 +
== Specifying Cascade on Delete in orm.xml ==
 +
 +
In the <tt>orm.xml</tt> descriptor file, specify cascade on delete as follows:
 +
<source lang="xml">
 +
<cascade-on-delete>true</cascade-on-delete>
 
</source>
 
</source>
  

Revision as of 11:21, 15 February 2011

EclipseLink JPA

Eclipselink-logo.gif
EclipseLink
Website
Download
Community
Mailing ListForumsIRCmattermost
Issues
OpenHelp WantedBug 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 For a OneToMany using a mappedBy or JoinColumn, the deletion of the related objects is cascaded on the database.

For a OneToMany using a JoinTable, the deletion of the join table is cascaded on the database (target objects cannot be cascaded even if private because of constraint direction).

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 mapping The deletion of the collection table is cascaded on the database.


@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.
  • Cache : Cascaded objects will still be removed from the cache and persistence context.
  • Version locking : Version will not be verified on deletion of cascaded object.
  • Events : Deletion events may not be executed on the cascaded objects if the objects are not loaded.
  • Cascading : The remove operation should still be configured to cascade in the mapping if using CascadeOnDelete.


@CascadeOnDelete Example

@Entity
@SecondaryTable(name="EMP_SALARY")
@CascadeOnDelete
public class Employee{
    @Id
    private long id;
    private String firstName;
    private String lastName;
    @Column(table="EMP_SALARY")
    private String salary;
    @OneToOne(mappedBy="owner", orphanRemoval=true, cascade={CascadeType.ALL})
    @CascadeOnDelete
    private Address address;
    @OneToMany(mappedBy="owner", orphanRemoval=true, cascade={CascadeType.ALL})
    @CascadeOnDelete
    private List<Phone> phones;
    @ManyToMany
    @JoinTable(name="EMP_PROJ")
    @CascadeOnDelete
    private List<Project> projects;
    ...
}

Specifying Cascade on Delete in orm.xml

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

<cascade-on-delete>true</cascade-on-delete>

See also, DeleteCascade Example


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

Back to the top