首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Hibernate:如何在更复杂的模型中设置关系(注释)?

Hibernate:如何在更复杂的模型中设置关系(注释)?
EN

Stack Overflow用户
提问于 2016-11-10 00:19:52
回答 1查看 122关注 0票数 0

我有以下简化模型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Business - (1:n) - Assignment - (n:1) - Process

模型类有以下注释:

业务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(mappedBy = "business", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Assignment> assignments;

赋值

通常,您将避免在这里创建单独的模型类,因为业务和流程具有n:m关系。但是我需要添加属性来自动分配。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@ManyToOne
@JoinColumn(name = "business_id")
private Business business;

@ManyToOne
@JoinColumn(name = "process_id")
private Process process;

过程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(mappedBy = "process", cascade = CascadeType.ALL)
private List<Assignment> assignments;

要求

  1. 当业务或流程被删除时,我也希望删除他的所有任务(而不是@OneToMany侧关系的合作伙伴)
  2. 当任务被删除时,我不想同时删除@OneToMany (业务或流程)

提示

  • 我尝试过用orphanRemoval = true和不使用,但没有得到完全的解决方案。
  • 模型类继承自提供标识符的MappedSuperClass
  • 需要@LazyCollection(LazyCollectionOption.FALSE),因为我在业务和流程中有几个@OneToMany关系,但是这个注释与这个问题无关
  • 我使用H2作为数据库,在与持久层交互时只使用Spring的@Repository接口,因此不会编写一行SQL

更新

不幸的是,我认为对以下注释的认可:@OnDelete(action = OnDeleteAction.CASCADE)和JUnit测试认可了理想行为的正确工作,从而回答了我的问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Test
public void test() {
    // stores an Business object in db and returns the saved object
    Business b = createBusiness();
    // stores an Process object in db and returns the saved object
    Process p = createProcess();
    // stores Assignmnent object with both relations in db and returns the saved object
    Assignment a = createAssignment(b, p);
    assertThat(a).isNotNull();
    // deletes Process object from db
    processService.delete(p);
    assertThat(processService.getById(p.getId())).isNull();
    assertThat(assignmentService.getById(a.getId())).isNull();
    assertThat(businessService.getById(b.getId())).isNotNull();
}

但事实并非如此。在我的JavaFX应用程序中,删除是被记录下来的,它看起来很正常,但是在以后查询数据库时,实体仍然在表中,尽管在JUnit测试中它不是.如果有人能在这个问题上给我一些启示,我将非常感激。

如果需要进一步的资料,我当然会提供。提前谢谢你帮我忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-10 03:54:22

编辑最终解决了这个问题,并通过以下设置获得了我想要的行为:

业务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(mappedBy = "business", orphanRemoval = true)
@OnDelete(action = OnDeleteAction.CASCADE)
private List<Assignment> assignments;

赋值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@ManyToOne
@JoinColumn(name = "business_id")
private Business business;

@ManyToOne
@JoinColumn(name = "process_id")
private Process process;

过程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(mappedBy = "process", orphanRemoval = true)
@OnDelete(action = OnDeleteAction.CASCADE)
private List<Assignment> assignments;

请注意添加的注释@OnDelete(action = OnDeleteAction.CASCADE)。这个提示来自here。我在这里省略了Hibernate文档,因为它们(imho)没有提供比链接SO更多的关于该特性的有用信息。

Update:还考虑删除的cascade属性,这是不必要的,因为我使用的是hibernates @OnDelete

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40522859

复制
相关文章
BootStrap3如何禁止响应式布局
我查阅了资料发现将:less变量@screen-xs和@screen-sm设置为0并重新编译less可解决问题。但是最终效果还不是特别好,不过大体上算禁止响应式布局了!
卡尔曼和玻尔兹曼谁曼
2019/01/25
1.6K0
基于bootstrap3响应式Tooltip提示插件
ggtooltip.js是一款非常实用的基于bootstrap 3.X的jQuery tooltip提示插件。该bootstrap jQuery tooltip插件实用简单,支持在4个方向上像素tooltip信息,支持修改tooltip的背景色、前景色和边框颜色。 该jQuery tooltip插件实用简单,支持在4个方向上像素tooltip信息,支持修改tooltip的背景色、前景色和边框颜色。它的特点有:
小狐狸说事
2022/12/01
1.1K0
WordPress 响应式主题 Zanblog 2.0(采用Bootstrap3框架)
主题特色 优雅的UI设计 Zanblog 2.0 的配色更加精致、简约、大气、优雅、令人着迷。同样沿用扁平化设计风格,简约、大气,更加符合互联网的浏览习惯,也更利于CSS3技术的使用与网站性能的提升。 采用Bootstrap3正式版 众所周知,在Zanblog 1.x版本中,我们大胆地采用了Bootstrap3的开发者版本,所以存在着许多bug与不足,而在Zanblog 2.0中,我们重新引入了最新的Bootstrap3正式版,让你领略Bootstrap3带来的非凡魅力! 采用HTML5语义化标签重写页面结
星哥玩云
2022/06/11
5460
SAP ABAP——内表(二)【创建内表】
💬个人网站:【芒果个人日志】​​​​​​ 💬原文地址:SAP ABAP——内表(二)【创建内表】 - 芒果个人日志 (wyz-math.cn) 💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。 💅文章概要:本文主要介绍一下SAP
THUNDER王
2023/02/23
3790
SAP ABAP——内表(二)【创建内表】
SAP ABAP——内表(四)【内表命令】
💬个人网站:【芒果个人日志】​​​​​​ 💬原文地址:SAP ABAP——内表(四)【内表命令】 - 芒果个人日志 (wyz-math.cn) 💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。 💅文章概要:本文主要介绍一下SAP A
THUNDER王
2023/02/23
3650
SAP ABAP——内表(四)【内表命令】
SAP ABAP——内表(一)【内表概要介绍】
💬个人网站:【芒果个人日志】​​​​​​ 💬原文地址:SAP ABAP——内表(一)【内表概要介绍】 - 芒果个人日志 (wyz-math.cn) 💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。 💅文章概要:本文是SAP AB
THUNDER王
2023/02/23
6840
SAP ABAP——内表(一)【内表概要介绍】
SAP ABAP——内表(十)【读取内表数据】
💬个人网站:【芒果个人日志】​​​​​​ 💬原文地址:SAP ABAP——内表(十)【读取内表数据】 - 芒果个人日志 (wyz-math.cn) 💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。 💅文章概要:本文主要介绍一下SAP
THUNDER王
2023/02/23
5000
SAP ABAP——内表(十)【读取内表数据】
SAP ABAP——内表(九)【删除内表数据】
💬个人网站:【芒果个人日志】​​​​​​ 💬原文地址:SAP ABAP——内表(九)【删除内表数据】 - 芒果个人日志 (wyz-math.cn) 💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。 💅文章概要:本文主要介绍一下SA
THUNDER王
2023/02/23
1.1K0
SAP ABAP——内表(九)【删除内表数据】
SAP ABAP——内表(八)【修改内表数据】
💬个人网站:【芒果个人日志】​​​​​​ 💬原文地址:SAP ABAP——内表(八)【修改内表数据】 - 芒果个人日志 (wyz-math.cn) 💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。 💅文章概要:本文主要介绍一下SAP
THUNDER王
2023/02/23
6890
SAP ABAP——内表(八)【修改内表数据】
SAP ABAP——内表(七)【追加内表数据—COLLECT】
💬个人网站:【芒果个人日志】​​​​​​ 💬原文地址:SAP ABAP——内表(七)【追加内表数据—COLLECT】 - 芒果个人日志 (wyz-math.cn) 💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。 💅文章概要:本文
THUNDER王
2023/02/23
9260
SAP ABAP——内表(七)【追加内表数据—COLLECT】
SAP ABAP——内表(五)【追加内表数据—INSERT】
💬个人网站:【芒果个人日志】​​​​​​ 💬原文地址:SAP ABAP——内表(五)【追加内表数据—INSERT】 - 芒果个人日志 (wyz-math.cn) 💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。 💅文章概要:本文
THUNDER王
2023/02/23
6780
SAP ABAP——内表(五)【追加内表数据—INSERT】
SAP ABAP——内表(六)【追加内表数据—APPEND】
💬个人网站:【芒果个人日志】​​​​​​ 💬原文地址: SAP ABAP——内表(六)【追加内表数据—APPEND】 - 芒果个人日志 (wyz-math.cn) 💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。 💅文章概要:本文
THUNDER王
2023/02/23
1.4K0
SAP ABAP——内表(六)【追加内表数据—APPEND】
React Native commond+r 不起作用 无响应
commond + r 不起作用 请检查模拟器是否连接到了电脑键盘
onety码生
2018/11/21
9380
Docker - 容器内软件设置
概述 一个大概导览,可能会常用。 详情会在文章底部给连接。 具体内容 一、安装软件太慢换一个源 mv /etc/apt/sources.list /etc/apt/sources.list.bak cat <<EOF >/etc/apt/sources.list deb http://mirrors.ustc.edu.cn/debian stable main contrib non-free deb http://mirrors.ustc.edu.cn/debian stable-updates ma
断痕
2021/01/21
6950
MySQL user表损坏案例一则
今天业务反馈某业务数据连接不上,登录看了一下,发现数据库服务已经挂了(由于特殊原因,该库没有监控,并且是单点--成本原因,刺激不?!)。于是查看日志,一直在反复刷下图信息。
DBA札记
2023/03/09
1.3K0
MySQL user表损坏案例一则
bootstrap3 组件
<span class="input-group-addon"><span class="glyphicon glyphicon-search"></span></span>
用户5760343
2019/10/14
6900
bootstrap3  组件
bootstrap3 js
tooltip 弹出框 popover image.png 折叠面板:accordion modal image.png image.png 轮播:carousel
用户5760343
2019/10/14
1K0
bootstrap3 js
MySQL | 表的内连接
数据操作语言:表连接查询(一) 从多张表中提取数据 从多张表提取数据,必须指定关联的条件。如果不定义关联条件就会出现无条件连接,两张表的数据会交叉连接,产生 笛卡尔积。 规定了连接条件的表连接语句,就不会出现笛卡尔积。 # 查询每名员工的部门信息 SELECT e.empno,e.ename,d.dname FROM t_emp e JOIN t_dept d ON e.deptno=d.deptno; 表连接的分类 表连接分为两种:内连接 和 外连接 内连接是结果集中只保留符合连接条件的记录 外
Zkeq
2022/05/18
3.3K0
MySQL | 表的内连接
Power Pivot里的表间关系不起作用?
小勤:那有什么意义?反正我放了值进去都会起作用的,自然就变成了其相对应的关系了,干嘛不直接在拉字段到行字段的时候就限制好呢?
大海Power
2021/08/30
1.7K0
复制文件到Docker容器内
举例说明: 假设一个运行的容器ID为9a28f199688e,想要将本地文件/path/to/local-file 复制到容器中的 /path/to/destination 目录中。
程序新视界
2023/09/07
9280

相似问题

表的Bootstrap3响应不起作用

50

如果在容器div内拒绝响应

12

如果在表内绑定,则使用knockout

10

在容器内保留响应表

11

如果在母版页内,则日期选取器不起作用

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文