Java org.hibernate.ObjectDeletedException:尝试删除患者对象时,已删除的对象将通过cascade:Error重新保存
尝试使用Hibernate从数据库中删除患者对象时,标题中出现错误 下面是我的Patient Java类:Java org.hibernate.ObjectDeletedException:尝试删除患者对象时,已删除的对象将通过cascade:Error重新保存,java,spring,hibernate,spring-mvc,jpa,Java,Spring,Hibernate,Spring Mvc,Jpa,尝试使用Hibernate从数据库中删除患者对象时,标题中出现错误 下面是我的Patient Java类: package com.vivalio.springmvc.model @Entity @Table(name = "PATIENT") @PrimaryKeyJoinColumn(name = "id") public class Patient extends User implements Serializable { @ManyToOne @JoinColumn
package com.vivalio.springmvc.model
@Entity
@Table(name = "PATIENT")
@PrimaryKeyJoinColumn(name = "id")
public class Patient extends User implements Serializable {
@ManyToOne
@JoinColumn(name = "docteur_id", referencedColumnName = "id")
private Docteur docteur;
@OneToMany(fetch = FetchType.EAGER, orphanRemoval = true, mappedBy = "patient", cascade = CascadeType.ALL)
@OrderBy("dateCreation desc")
private Set<Consultation> consultations = new HashSet<Consultation>();
public Set<Consultation> getConsultations() {
return consultations;
}
public void setConsultations(Set<Consultation> consultations) {
this.consultations = consultations;
}
public Docteur getDocteur() {
return docteur;
}
public void setDocteur(Docteur docteur) {
this.docteur = docteur;
}
}
执行以下代码后,我出现以下错误:
@Override
public void deleteBySSO(String sso) {
Criteria crit = createEntityCriteria();
crit.add(Restrictions.eq("ssoId", sso));
Patient user = (Patient) crit.uniqueResult();
delete(user);
}
严重:Servlet[dispatcher]的Servlet.service()在上下文中
路径[/vivalio]引发异常[请求处理失败;嵌套
例外是
org.springframework.dao.InvalidDataAccessApiUsageException:已删除
对象将通过级联重新保存(从
关联):[com.vivalio.springmvc.model.Patient#34];嵌套
异常为org.hibernate.ObjectDeletedException:已删除的对象
将通过级联重新保存(从
关联:[com.vivalio.springmvc.model.Patient#34]]和root
原因org.hibernate.ObjectDeletedException:删除的对象将是
按级联重新保存(从关联中删除删除的对象):
[com.vivalio.springmvc.model.Patient#34]
org.hibernate.internal.SessionImpl.forceFlush(SessionImpl.java:1272)
在
org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:187)
在
org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:114)
在
org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
在
org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:684)
您需要从集合中删除该对象,或将FetchType设置为延迟加载
从包含一组患者的另一个类中将FetchType设置为Lazy load后,工作正常。从集合中删除患者
@Override
public void deleteBySSO(String sso) {
Criteria crit = createEntityCriteria();
crit.add(Restrictions.eq("ssoId", sso));
Patient user = (Patient) crit.uniqueResult();
delete(user);
}