gpt4 book ai didi

java - @Cascade Delete 不起作用(JPA、Hibernate 和 Spring mvc)

转载 作者:行者123 更新时间:2023-11-30 07:33:46 28 4
gpt4 key购买 nike

我阅读了很多有关此主题的帖子和指南,但我仍然无法使其发挥作用。

我无法从数据库中删除刚刚从父实体集合中删除的子实体(当然插入和更新操作适用于我的子集合)。

为了让您更容易理解,我创建了一个简单的代码,如您所见,我从数据库中获取了一个对象Utente,我删除了一个对象Autorizzazioni 来自 autorizzazioniLista 字段,最后我保存了对象 Utente

在图片中,您可以看到对象 Autorizzazioni 已从集合中删除。

在这里你可以看到从数据库中取出的对象Utente以及集合autorizzazioniLista里面有什么(有2个autorizzazioni:id 8 和 ID 92)。 enter image description here

在这里您可以看到,当保存对象 Utente 时,对象 Autorizzazioni (id 8) 已从集合 autorizzazioniLista 中删除。 enter image description here

这里是Utente

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

有人能发现错误吗?

最佳答案

如果您使用相同的 hibernate Session 来加载对象并通过删除元素来更新集合,则需要通过设置父对象来将依赖集合实体与其“所有者”分离对 null 的引用。大致思路是这样的:

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

关于java - @Cascade Delete 不起作用(JPA、Hibernate 和 Spring mvc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35703348/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com