I would like to delete all rows in tbl_license_user_alert when deleting either a license or an user: http://www.img-teufel.de/uploads/Unbenannt1d4f8a349jpg.jpg
Where do I need to set the cascade stuff?
Cascade Attribute or @Cascade Annotation?
Which CascadeStyle do I need for this purpose?
@Entity
@Table( name = "tbl_license" )
public class License implements Serializable
{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column( name = "id", nullable = false, columnDefinition = "serial" )
private int id;
@OneToMany( fetch = FetchType.LAZY, mappedBy = "id.license" )
private List<LicenseUserAlert> alerts;
// getter + setter
}
@Entity
@Table( name = "tbl_license_user_alert" )
@AssociationOverrides({
@AssociationOverride( name = "id.user", joinColumns = @JoinColumn( name = "user_id", columnDefinition = "int" ) ),
@AssociationOverride( name = "id.license", joinColumns = @JoinColumn( name = "license_id", columnDefinition = "int" ) )
})
public class LicenseUserAlert implements Serializable
{
private static final long serialVersionUID = 1L;
@EmbeddedId
private LicenseUserAlertId id;
@Column( name = "timer", columnDefinition = "int default 86400" )
private int timer = 86400;
public LicenseUserAlertId getId()
{
return id;
}
public void setId( LicenseUserAlertId id )
{
this.id = id;
}
@Transient
public License getLicense()
{
return id.getLicense();
}
public void setLicense( License license )
{
id.setLicense( license );
}
@Transient
public User getUser()
{
return id.getUser();
}
public void setUser( User user )
{
id.setUser( user );
}
public int getTimer()
{
return timer;
}
public void setTimer( int timer )
{
this.timer = timer;
}
}
@Embeddable
public class LicenseUserAlertId implements Serializable
{
private static final long serialVersionUID = 1L;
@ManyToOne
@ForeignKey( name = "tbl_license_fkey" )
private License license;
@ManyToOne
@ForeignKey( name = "tbl_user_fkey" )
private User user;
public LicenseUserAlertId( License license, User user )
{
this.license = license;
this.user = user;
}
public LicenseUserAlertId()
{
}
public License getLicense()
{
return license;
}
public void setLicense( License license )
{
this.license = license;
}
public User getUser()
{
return user;
}
public void setUser( User user )
{
this.user = user;
}
}
try to add following annotations to your License.alerts if you are working with JPA.
EDIT
orphanRemoval is from jpa2.0. OneToMany annotation. (javax.persistence.OneToMany)
if you don’t have jpa2.0, then you can complement jpa cascading by hibernate cascade annotation.:
infact this cascadeType is deprecated in later hibernate version. see source code from Hibernate 3.6.8: