Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "EclipseLink/UserGuide/JPA/Advanced JPA Development/Schema Generation/CascadeOnDelete"
Line 31: | Line 31: | ||
|- | |- | ||
| OneToMany mapping | | OneToMany mapping | ||
− | | For a OneToMany using a mappedBy | + | | 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). | 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). | ||
|- | |- |
Revision as of 15:13, 1 February 2011
EclipseLink JPA
EclipseLink | |
Website | |
Download | |
Community | |
Mailing List • Forums • IRC • mattermost | |
Issues | |
Open • Help Wanted • Bug Day | |
Contribute | |
Browse Source |
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.
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. |
@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.
- 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.
Configuration File
In the orm.xml descriptor file, specify cascade on delete as follows:
<cascade-on-delete>true</cascade-on-delete>
Schema Generation | Appending Strings to CREATE_TABLE Statements | |
EclipseLink Home
JPA User Guide: Table of Contents, Search |
||
How to contribute to this guide... |
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; ... }