gpt4 book ai didi

java - Hibernate Cascade.All 属性不会在 Postgres 外键约束上添加 ON DELETE CASCADE

转载 作者:行者123 更新时间:2023-12-02 10:54:47 31 4
gpt4 key购买 nike

我正在使用 SpringBoot + PostgreSQL + JPA Hibernate,一切似乎都工作正常,但是 Cascade.ALL 属性未应用于表 user_roles。我错过了什么重要的事情吗?我尝试过ManytoMany关系和ManytoOne,但还没有成功。

我使用的实体文件如下。

User.java

@Entity
@Table(name = "USERS")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class User {


@Id
@SequenceGenerator( name = "lineupSeq", sequenceName = "lineup_seq", allocationSize = 20, initialValue = 50 )
@GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "lineupSeq" )
@Column(name="id")
private Long id;

@Column(unique=true)
private String username;

@Column
@JsonIgnore
private String password;

@Column(name="prodcrud")
private String prodcrud;

@Column(name="devcrud")
private String devcrud;

@Column(name="testcrud")
private String testcrud;



@ManyToOne(fetch = FetchType.EAGER, cascade=CascadeType.ALL)
@JoinTable(name = "user_roles",
joinColumns = {@JoinColumn(name = "user_id", referencedColumnName="id") },
inverseJoinColumns = {@JoinColumn(name = "role_id", referencedColumnName="id") })
private Role role;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

已添加 postgres 约束的屏幕截图 Postgres constraint added

最佳答案

是的,您只是希望这个注释做一些它没有做的事情。

Cascade.ALL 告诉 JPA,在运行时使用 JPA 对 User 完成的每个操作(持久化、合并、删除等)也必须应用其角色

请注意,这是没有意义的:因为它是一个ManyToOne,所以在删除用户时尝试删除用户的角色将导致外键约束破坏,因为相同的角色也被其他用户引用。

阅读文档。不要猜测注释的作用。

关于java - Hibernate Cascade.All 属性不会在 Postgres 外键约束上添加 ON DELETE CASCADE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51855510/

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