我在休眠JPA註釋一對多關係工作,這裏是我的表和實體類的細節...Hibernate註解一個一對多的親子刪除
Service (entity class: ServiceRegistration.java)
=======
serviceid
servicename
channel meta table (entity class: Channels.java)
========
channelid
channelname
service_channel (entity class: ServiceChannels.java)
===============
seq_id
serviceid
channelid
這裏,service_channel表有服務ID和channelid作爲forign鍵..我可以獲取,修改記錄。
,但我無法能夠刪除服務和它的子記錄。如果我刪除服務表中的記錄,對應的service_channel表中的記錄應該被刪除。這裏是我的實體類的細節...
另外,我得到重複的記錄..說如果一個服務(service1)有2個通道關聯,當我獲取服務列表時,我看到列表中的2個service1條目。
serviceregistration.java
@OneToMany(fetch = FetchType.EAGER)
@JoinTable(name = "multichannel_service_channel", joinColumns = {
@JoinColumn(name="serviceid", unique = true)
},
inverseJoinColumns = {
@JoinColumn(name="channelid")
}
)
private Set<Channels> channelsInvolved;
@OneToMany(mappedBy="serviceRegistration")
@Cascade(org.hibernate.annotations.CascadeType.REMOVE)
private List<ServiceChannel> serviceChannels;
servicechannel.java
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column private int servicechannelid;
@ManyToOne
@JoinColumn(name = "serviceid")
private ServiceRegistration serviceRegistration;
@ManyToOne
@JoinColumn(name = "channelid")
private Channels channels;
channels.java
@Id
@Column
private int channelid;
@Column
private String channelname;
@Column
private String channeldescription;
@Column
private boolean isactive;
請幫助解決這個問題。
Thanks al ot爲你的答案,這是我試過..... ** @ OneToMany(mappedBy =「serviceRegistration」) @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN) private List serviceChannels; **我得到的錯誤.....批量更新返回意外的行數從ü pdate [0];實際行數:0;預計:1;嵌套異常是org.hibernate.S taleStateException:批處理更新從update [0]返回意外的行計數; 實際行數:0;預計:1 –
Surez
我不知道你跑了什麼,我認爲沒有人可以幫助你。但是,根據我的經驗,StaleStateException似乎是另一個與此問題無關的問題。你可以做一個簡單的測試,試試DELETE_ORPHAN,並確保你知道你正確使用它?我擔心你的代碼中不僅有一個問題會使你的問題複雜化。 –