postgresql - JPA:如何从其他表中删除用户和所有引用?

标签 postgresql hibernate jpa sql-delete cascade

当我从 users 表中删除一个用户时,他所有的 posts 和对该帖子的任何 comments 也应该被删除.

模型如下所示:

@Data
@Entity @Table(name = "users")
public class BlogUser {

    @Id
    private String userName;
    private String password;
    private String email;

    @Enumerated(EnumType.STRING)
    private Role role;

    private boolean enabled;
}

post 实例具有对所属用户的引用:

@Data
@Entity @Table(name = "posts")
public class Post {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String postText;

    @ManyToOne(cascade = CascadeType.ALL)
    private BlogUser user;

    private LocalDateTime createdDate;
}

同样的情况也适用于评论。

现在当我想执行删除时,我得到这个错误:

org.postgresql.util.PSQLException: ERROR: update or delete on table "users" violates foreign key constraint "fkqdk379brhxkbj4c8qenbuu85l" on table "posts"

数据库是 Postgres。我尝试使用 @ManyToOne(cascade = CascadeType.ALL),但没有帮助。

更新:

我的想法是,我想保留表的当前架构。
不向 BlogUser 类添加帖子和/或评论。

最佳答案

需要给BlogUser添加级联侧面也是为了将其删除级联到Post & Comment .

将类似的内容添加到您的 BlogUser类:

@Getter
@OneToMany(cascade=CascadeType.ALL, mappedBy="user")
private Collection<Post> posts = new HashSet<>();

@Getter
@OneToMany(cascade=CascadeType.ALL, mappedBy="user")
private Collection<Comment> comments = new HashSet<>();

关于postgresql - JPA:如何从其他表中删除用户和所有引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48465298/

相关文章:

hibernate - 使用 H2 正确拆卸 hibernate 测试

java - 如何进行自定义 EJB/JPA 映射类型?

sql - 如果任何字段匹配,如何对 postgres 表的结果进行分组?

postgresql - 如何在未安装 PostgreSQL 的服务器上仅下载、编译和安装 libpq 源

mysql - hbm2ddl - 如何避免 Hibernate 创建外键约束?

java - 为什么 hibernate 立即执行身份插入

mysql - Hibernate Criteria Query 使用 MySQL REPLACE 和 CONCAT 函数

java - 如何使用 JOOQ 记录的更新来仅更新 jsonb 字段中嵌入的更改?

database - 在多个 postgresql 集群中创建角色

java - 如何在 hibernate 中覆盖 transient 对象的哈希码和等于?