我是新的休眠。所以,我不知道如何做到这一点:休眠:从关联表中删除记录与外键
我有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