在双向一对多映射中设置级联



我对hibernate还很陌生,似乎还不完全理解级联。

所以,我有Job和Client类,我想实现的是:

  1. 如果我删除客户端,作业也会被删除
  2. 如果我删除作业,客户端不会被删除

我的模型目前看起来像这样:

@Entity
public class Client {
@Id
@GeneratedValue
private Long clientId;
private String name;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
private List<Job> jobs;
}
@Entity
public class Job {
@Id
@GeneratedValue
private Long jobId;
private String title;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "client_id")
private Client client;
// getters, setters and some fields were omitted for brevity
}

提前感谢

使用cascade可以对实体执行一些转换操作。如果一个实体的状态发生了更改,则它可以更改关联实体的状态。

  1. 如果删除客户端->删除所有相关作业
    您可以使用:

    • @OneToMany(mappedBy="client", cascade = CascadeType.REMOVE) // or you could make all operations to be cascaded with CascadeType.ALL
    • @OneToMany(mappedBy="client", orphanRemoval = true)
      它们之间的差异
  2. 如果REMOVE作业->不要删除关联的客户端
    您应该排除REMOVE的级联类型,明确枚举您需要的级联类型或根本不指定cascade属性。

最新更新