Java org.hibernate.ObjectDeletedException:尝试删除患者对象时,已删除的对象将通过cascade:Error重新保存

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

尝试使用Hibernate从数据库中删除患者对象时,标题中出现错误

下面是我的Patient Java类:

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);
    }