簡體   English   中英

@Cascade Delete不起作用(JPA,Hibernate和Spring MVC)

[英]@Cascade Delete not working (JPA, Hibernate and Spring mvc)

我閱讀了許多有關此主題的文章和指南,但仍然無法使它起作用。

我無法從數據庫中刪除剛剛從父實體集合中刪除的子實體(當然,插入和更新操作適用於我的子集合)。

為了使您更容易理解,我創建了一個簡單的代碼中,你可以看到,我從數據庫中獲取的對象Utente,我從外地autorizzazioniLista刪除對象Autorizzazioni最后我保存對象Utente。

在圖片中,您可以看到對象Autorizzazioni已從集合中刪除。

在這里,您可以看到對象Utente從數據庫中獲取的以及集合autorizzazioniLista中的內容 (有2個autorizzazioniList :id 8和id 92)。 在此處輸入圖片說明

在這里您可以看到,在保存對象Utente時,已從集合autorizzazioniLista中刪除了對象Autorizzazioni (id 8)。 在此處輸入圖片說明

這是烏騰特

@Entity
@Table(name = "utente")
@Component
public class Utente implements Serializable{

    private static final long serialVersionUID = -7124540331184173742L;

    @Id
    @GeneratedValue
    @Column(name = "id")
    private int id;

    @Column(name = "nome")
    @Size(min = 1, max = 45)
    @Pattern(regexp="^[A-Za-z ']*$")
    @NotBlank
    private String nome;

    @Column(name = "cognome")
    @Size(min = 1, max = 45)
    @Pattern(regexp="^[A-Za-z ']*$")
    private String cognome;

    @Column(name = "email")
    @Email
    @Size(min = 1, max = 70)
    private String email;

    @OneToOne(mappedBy = "utente", cascade = CascadeType.ALL)
    @Valid
    private Autenticazione autenticazione;  

    @OneToMany(mappedBy = "utente", fetch = FetchType.EAGER,  orphanRemoval=true, cascade = CascadeType.ALL)    
    private List<Autorizzazioni> autorizzazioniLista;
}

這是Autorizzazioni

@Entity
@Table(name = "autorizzazioni")
@Component
public class Autorizzazioni implements Serializable {

    private static final long serialVersionUID = 1167361558860087705L;      

    @Id
    @GeneratedValue
    @Column(name = "id")
    private int id; 

    @ManyToOne(targetEntity = Utente.class)
    @JoinColumn(name = "utente", referencedColumnName = "id")
    @Size(min = 1, max = 11)
    private Utente utente;

    @ManyToOne(targetEntity = Autorizzazione.class)
    @JoinColumn(name = "autorizzazione", referencedColumnName = "id")
    @Size(min = 1, max = 11)
    private Autorizzazione autorizzazione;
}

這是Autorizzazione

@Component
@Entity
@Table(name="autorizzazione")
public class Autorizzazione implements Serializable{

    private static final long serialVersionUID = -1118124214231477185L;         

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="id", nullable=false, updatable=false)
    private int id; 

    @Size(min = 1, max = 45)
    @NotBlank
    @Pattern(regexp="^[A-Za-z.-_ ]*$")
    @Column(name = "descrizione")
    private String descrizione;
}

有人可以發現錯誤嗎?

如果您使用相同的休眠Session來加載對象並通過刪除元素來更新集合,則需要通過將父對象引用設置為null來使從屬集合實體與其“所有者”分離。 大致情況:

Autorizzazioni autorizzazioni = utente.getAutorizzazioniLista().remove(0);
autorizzazioni.setUtente(null);
session.saveOrUpdate(utente);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM