当前位置: 首页 > 面试题库 >

在删除时在@OneToMany中的休眠中设置null

唐宏壮
2023-03-14
问题内容

我有一个部门实体,其关系如下:

  1. 许多部门 可以在 一个父部门中
        @ManyToOne
    @JoinColumn(name = "ik_parent_department_id")
    private Department parentDepartment;
  1. 一个上级部门 可以有 多个部门
        @OneToMany(mappedBy = "parentDepartment")
    private Set<Department> children = new HashSet<Department>(0);

我想实现下一个:当我 删除 一个 部门 ,那么 ik_parent_department_id 所有的参数 孩子 这个的
部门 设置为 。任何想法如何做到这一点?


问题答案:

您必须将子级的ik_parent_department_id显式设置为null。

Department parentDepartment = (Department) session.load(Department.class, id);
session.delete(parentDepartment);
for (Department child : parentDepartment.getChildren()){
    child.setParentDepartment(null);
} 
session.flush();

进行级联时,您只能删除子级Departments



 类似资料:
  • 问题内容: 这是我在堆栈上的第一个问题,请保持温柔:D 我正在尝试创建休眠的OneToMany关系。当我尝试从数据库中获取一些数据时,出现了StackOverflowError。但是,当我删除OneToMany部分时,一切正常。这是我的REST服务的一部分,目前它可以在VMware vFabric Server和MySQL DB上运行。 获取示例: MySQL脚本: 类: 错误: 编辑: 感谢@T

  • 问题内容: 我有一个Java实体,其字段带有注解@Formula,在其中执行了一个SQL查询,其中包含Firebird数据库的某些特定功能。现在,我必须迁移到Oracle数据库,并且需要替换该@Formula中的SQL代码。有办法实现吗?我可以通过某种方式扩展Hibernate @Formula以便在运行时更改注释的值吗?谢谢 问题答案: 您可以实现这种稍微不同的方式。 您可以放置一个占位符并添加

  • 问题内容: 当我尝试从数据库中删除条目时,使用 然后我可以执行以下操作: 1)如果该行存在于数据库中,则将执行两个SQL查询:一个选择,然后一个删除 2)如果数据库中不存在该行,则仅执行选择查询 但是同样,更新不是这种情况。无论是否存在数据库行,都只会执行更新查询。 请让我知道为什么这种行为用于删除操作。这不是性能问题,因为遇到了两个查询而不是一个查询? 编辑: 我正在使用休眠3.2.5 样例代码

  • 问题内容: 在Hibernate中删除表中所有行 的最佳方法是什么? 如果我遍历一个集合并称其在我所知范围内没有执行。 如果使用其他选项,则不会影响持久性上下文。 如果没有更好的选择,何时应该使用这些方法? 问题答案: 如果没有什么要层叠的,请使用HQL删除 如果您有层叠,请迭代该集合并分别删除每个集合。 问题出在以下事实:休眠在内部处理级联,而不是将其留给数据库。因此,发送查询不会触发内部级联,

  • 问题内容: 您能否为我提供以下情况下的Hibernate映射示例: 带有简单主键()的父表() 子表(),其复合键包括 a)父表的外键() b)字符串类型的key() 有一个孩子的父母 Parent类将具有Child对象的列表 当父类保存,更新,删除后,更改将级联到子类 问题答案: 我没有完全按照您的要求进行操作,但这可能会使您朝着正确的方向入手。我认为应该可以。此页面非常详细地解释这些注解。

  • 问题内容: 在Hibernate 3.2中如何在运行时设置获取类型? 如果有可能在运行时更改获取类型(“懒惰/渴望”)。因此,如果已经定义了获取模式,即hibernate.mapping文件中的“选择/连接”,是否有任何影响? 问题答案: 您可以用来指定要初始化的特定集合。 例如 在这里查看更多