jpaの一対のマルチレベル削除
jpaで一方の対応する複数のレコードをカスケード削除するには、複数対で一方との複数対の関係を確立する必要があります.そうしないと、カスケードは削除されません.以下のようにします.
独身の一対の多関係のみが確立すると、update文のみが実行され、多方面の関連フィールドが空に設定.
public class ChannelEntity implements java.io.Serializable {
....
private List<ChannelDayLimitEntity> chanelDayLimits;
@OneToMany(mappedBy="channel", cascade=CascadeType.REMOVE,orphanRemoval=true)
public List<ChannelDayLimitEntity> getChanelDayLimits() {
return chanelDayLimits;
}
public void setChanelDayLimits(List<ChannelDayLimitEntity> chanelDayLimits) {
this.chanelDayLimits = chanelDayLimits;
}
}
public class ChannelDayLimitEntity implements java.io.Serializable {
...
private ChannelEntity channel;
@ManyToOne(cascade = { CascadeType.REFRESH, CascadeType.MERGE }, optional = true)
@JoinColumn(name = "channel_id")
public ChannelEntity getChannel() {
return channel;
}
public void setChannel(ChannelEntity channel) {
this.channel = channel;
}
....
}
独身の一対の多関係のみが確立すると、update文のみが実行され、多方面の関連フィールドが空に設定.