我是新的休眠。所以,我不知道如何做到這一點:休眠:從關聯表中刪除記錄與外鍵
我有3個表:
表人:
@Entity
@Table(name = "ASD_PERSON")
public class AsdPerson implements Serializable {
@Id
@SequenceGenerator(name="seq_name", sequenceName="gen_id_value", allocationSize = 1)
@GeneratedValue(generator="seq_name")
@Column(name="F_PERSON_ID", nullable = false)
private Long fPersonId;
@OneToMany(mappedBy = "AsdPerson",
cascade = CascadeType.ALL,
orphanRemoval = true)
private List<AsdPersonEvent> asdPersonEventList;
... setters and getters ...
}
表事件:
@Entity
@Table(name = "ASD_EVENT")
public class AsdEvent implements Serializable {
@Id
@SequenceGenerator(name="seq_name", sequenceName="gen_id_value", allocationSize = 1)
@GeneratedValue(generator="seq_name")
@Column(name="F_EVENT_ID", nullable = false)
private Long fEventId;
@OneToMany(mappedBy = "AsdEvent",
cascade = CascadeType.ALL,
orphanRemoval = true)
private List<AsdPersonEvent> asdPersonEventList;
... setters and getters ...
}
表與人事件:
@Entity
@Table(name = "ASD_PERSON_EVENT")
@IdClass(AsdPersonEventPK.class)
public class AsdPersonEvent implements Serializable {
@Id
@GenericGenerator(name = "generator", strategy = "foreign",
parameters = @Parameter(name = "property", value = "asdPerson"))
@GeneratedValue(generator = "generator")
@Column(name="F_PERSON_ID", nullable = false, insertable = false,
updatable = false)
private Long fPersonId;
@Id
@GenericGenerator(name = "generator", strategy = "foreign",
parameters = @Parameter(name = "property", value = "asdEvent"))
@GeneratedValue(generator = "generator")
@Column(name="F_EVENT_ID", nullable = false, insertable = false,
updatable = false)
private Long fEventId;
@ManyToOne
@JoinColumn(name = "F_PERSON_ID", insertable = false,
updatable = false)
private AsdPerson asdPerson;
@ManyToOne
@JoinColumn(name = "F_EVENT_ID", insertable = false,
updatable = false)
private AsdEvent asdEvent;
... setters and getters ...
}
Everything works完美(添加新記錄,創建新的對象)的情況下除外,當我嘗試刪除事件表或Person表相關的記錄:
...
AsdEvent ev = getService().get(115); // get record from Event table by id = 115 (for example)
ev.getAsdPersonEventList().remove(1); // delete some existing records
getService().merge(ev);
...
之後,我得到的錯誤:
deleted object would be re-saved by cascade (remove deleted object from associations): [database.AsdPersonEvent#[email protected]]
如何配置Hibernate註釋或其他方式來擺脫這個錯誤?
請嘗試@Cascade({CascadeType.SAVE_UPDATE,CascadeType.DELETE_ORPHAN}),並顯示如何從列表中刪除AsdPersonEvent。 – blow 2010-11-11 10:49:05
我已經展示瞭如何從列表中刪除AsdPersonEvent。 – brazh 2010-11-11 11:00:43
@blow:不,它不起作用。我不明白,當你說:「顯示如何從列表中刪除AsdPersonEvent」時,你的意思是什麼。 – brazh 2010-11-11 12:25:03