我对hibernate还很陌生,似乎还不完全理解级联。
所以,我有Job和Client类,我想实现的是:
- 如果我删除客户端,作业也会被删除
- 如果我删除作业,客户端不会被删除
我的模型目前看起来像这样:
@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
可以对实体执行一些转换操作。如果一个实体的状态发生了更改,则它可以更改关联实体的状态。
-
如果删除客户端->删除所有相关作业
您可以使用:@OneToMany(mappedBy="client", cascade = CascadeType.REMOVE) // or you could make all operations to be cascaded with CascadeType.ALL
@OneToMany(mappedBy="client", orphanRemoval = true)
它们之间的差异
-
如果REMOVE作业->不要删除关联的客户端
您应该排除REMOVE的级联类型,明确枚举您需要的级联类型或根本不指定cascade
属性。