gpt4 book ai didi

java - hibernate 级联子级

转载 作者:行者123 更新时间:2023-11-30 08:48:24 24 4
gpt4 key购买 nike

我使用 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 在它对用户实体执行操作时执行级联。如果您想确切地告诉它必须执行级联的操作,您可以这样做:

@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 “更新”、“保存”和“saveOrUpdate”方法...您应该使用“坚持”和“合并”。

关于java - hibernate 级联子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31974158/

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