我使用Hibernate 和 spring data 通过 Oracle DB 管理我的实体
我有以下实体
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@NotNull
private String title;
}
还有一个
@Entity
@Table(name = "user_detail")
public class UserDetail {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
private String address;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
}
我想在删除用户时子“用户详细信息”也被删除(级联) 如何用hibernate解决这个问题
最佳答案
为了执行级联,您必须对代码进行一些更改。
首先,您必须在 User 实体中映射 UserDetail 并在关系注释中包含级联设置:
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@NotNull
private String title;
@OneToOne(mappedBy="user", cascade=CascadeType.ALL)
private UserDetail detail;
}
PS:我假设是一对一的关系,但请随意映射,如你所愿......所有 Hibernate 的关系注释都支持级联。还支持映射集合。
通过这样做,您可以告诉 Hibernate 在对 User 实体执行操作时执行级联。如果您想确切地知道必须执行级联的哪些操作,您可以这样做:
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@NotNull
private String title;
@OneToOne(mappedBy="user", cascade={CascadeType.PERSIST, CascadeType.DELETE})
private UserDetail detail;
}
您可以在 Hibernate 文档上找到所有 CascadeType。请注意,为了执行级联,您应该避免使用 hibernate 的 session “update”、“save”和“saveOrUpdate”方法...您应该使用“persist”和“merge”。
关于java - hibernate 级联子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31974158/