java - hibernate 级联子级

标签 java hibernate jpa spring-data-jpa

我使用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/

相关文章:

java - 使用 HttpURLConnection 将 XML 数据从 HTTP Java 客户端发送到 servlet 时出现问题

Java代理忽略应用程序类路径

hibernate - HQL按集合项属性值之和排序

hibernate - 带有非键连接列的 Spring boot 多对一不起作用

java - Spring JPA : Select specific columns on join with annotation/JPQL

java - 为什么我在尝试开始事务时得到 NullPointerException?

java - 通过枚举对 Singleton 进行单元测试抛出 java.lang.NoClassDefFoundError

java - 如何在检索期间忽略 hibernate 中自动生成的键

java - 无效数据访问ApiUsageException : detached entity passed to persist

java - GlassFish 2.1.1 - TopLink (JPA1) 持久性异常 7106 - 字符串加密之谜