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

时间:2018-08-15 08:40:44

标签: java postgresql hibernate spring-boot jpa

我正在使用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

1 个答案:

答案 0 :(得分:1)

是的,您只是希望此批注执行不做的事情。

Cascade.ALL告诉JPA,在运行时使用User对J {1}执行的每个操作(持久,合并,删除等)也必须应用在其role上。

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

阅读文档。不要猜测注释会做什么。