当前位置: 首页 > 知识库问答 >
问题:

在具有多个关系的hibernate中删除

卜鹏
2023-03-14

我的实体:

@Entity
public class User{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "userId")
    private Long id;
    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
    private List<UC> owned = new ArrayList<UC>();
}

@Entity
public class UC{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @JoinColumn(name = "ukId")
    private Long id;
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "userId")
    private User user;
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "catId")
    private Cat cat;
}

@Entity
public class Cat{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "catId")
    private Long id;
    @OneToMany(mappedBy = "cat", cascade = CascadeType.ALL)
    private List<UC> owned = new ArrayList<UC>();
}

这就是我的问题,实际上很少有。

问题1:

我删除了一个Cat对象,设置了cascade类型。所有在Cat中拥有的列表中,因此当我删除Cat对象时,UC中带有Cat的所有记录都将被删除,但我得到“已删除的对象将通过级联重新保存”,这是因为我在UC中与用户有另一个关系,用户将UC存储在列表中。当我从UC中删除Cat对象和记录时,我不想删除用户对象,因此在UC中的@ManyToOne上设置cascade是不允许的。我应该如何操作?在删除Cat之前,我是否应该从用户拥有的列表中删除UC的所有实例?我在UC中的关系比这里显示的要多,如果是这样,我也必须从其他列表中删除实例。

问题2:

类似的情况,但我得到了常规的多对多关系,我想删除连接表记录,而不删除关系的另一端。

共有1个答案

佟和平
2023-03-14

这是我的解决方案。首先,我将通过这种方式,为“一家一户”协会设立一个孤儿移除计划。

@OneToMany(mappedBy = "cat", cascade = CascadeType.ALL, orphanRemoval = true)

然后,假设您有一个用户u和一个要删除的Cat c。这段代码应该运行良好

    // Remove a cat and update the other entities
    Session s = sessionFactory.openSession();
    s.beginTransaction();
    s.delete(c);
    for (UC uc : c.getOwned())
        uc.getUser().getOwned().remove(uc);
    s.update(u);
    s.getTransaction().commit();
    s.close();
 类似资料:
  • 我需要支持一个涉及以下实体的场景(使用JPA): 用户 一个用户可以有多个帐户,一个帐户可以在多个用户之间共享,这是迄今为止的标准@ManyToMany关系。 一个用户可以为每个帐户拥有一组不同的角色,一个角色可以在多个用户之间共享。 我遵循了这个实践,它解释了一种用额外列映射多对多关联的方法,但我不确定我是否得到了它。 用户实体: 账户实体: 用户帐户实体: 用户帐号: 我正在创建一个新用户并尝

  • 问题内容: Book,User和Review说,我正在构建具有复杂模型的应用程序。 评论包含书籍和用户ID。为了能够搜索至少包含一个评论的“图书”,我已将“图书”设置为“评论”的父级,并且具有这样的路由。但是,我还需要找到撰写包含某些短语的评论的用户。 是否可以同时将书和用户作为评论的父级?有没有更好的方法来处理这种情况? 请注意,我无法更改数据建模的方式/不愿意这样做,因为数据已从持久性数据库传

  • 我是新来laravel的,所以原谅我可能的愚蠢问题。此外,我确实研究了所有其他“类似”的问题,但要么它们没有重现正确的解决方案,要么我真的很难理解。 情景: 我有一个帖子模型和一个主题模型。这就是他们现在的样子。 在岗位上。php 在主题上。php 现在,我需要实现的是: 如果将查询参数传递给请求(即q=Food),我只想返回在主题关系中包含主题食物的帖子,而不返回其他帖子。如果什么都没有通过,那

  • 我有一个OneTo多项关系,我可以插入记录,但不能删除它们,当我试图删除它时,它会遇到“外键约束失败”错误。我使用级联删除孤儿如下,但不工作还。 父类的成员具有以下getter 成员类的父类具有以下getter 我也使用了下面的注释,但不起作用 我的冬眠依赖如下 我删除信息的代码

  • 我有一个名为 Article 的实体类,另一个名为 ArticleTag 的实体。这两个实体是许多多属性关系,这意味着许多文章可以链接到同一个标签,并且许多标签可以与同一篇文章相关联。 在我的文章实体中,我有以下内容: 在我的ArticleTag实体中,我有这个: 当我的控制器被调用来删除一篇文章时,我在我的ArticleDao类中使用了一个方法,该方法基本上正在这样做: 但是,我的文章无法删除。

  • 问题内容: 有三个表:,并且,医院能提供的医疗服务和语言服务。因此,存在两个多对多关系。 简单ERD 现在,我想使用和搜索医院数据。 DaoImpl: 而且,如果我想从三个表中按邮政编码,医疗类型和语言进行搜索,那么如何编写一个jsql。 警告: 错误:org.hibernate.hql.internal.ast.ErrorCounter- 预期加入的路径!希望加入的路径!在org.hiberna