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

EclipseLink/UserGuide/JPA/Advanced JPA Development/Schema Generation/CascadeOnDelete

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

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

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

{{EclipseLink_AttributeTable |caption=CascadeOnDelete Behavior |content= |- | Entity/Mapping | Behavior |- | 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

This example cascade the deletion of the Employee secondary table, and all of its owned relationships.

@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 eclipselink-orm.xml

In the eclipselink-orm.xml descriptor file, specify cascade on delete as shown in the following example:

<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