问题标签 [hibernate-cascade]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 将复合标识符 @EmbeddedId 与 @OneToOne 一起使用
我下面的示例是出于学习目的。目标是使用复合标识符创建一些示例。不幸的是,我得到了一些奇怪的结果。
实体:Course
,Teacher
CoursePk
。_
每门课程只能由一个人授课Teacher
。
我@OneToOne()
在类之间使用双向关系Teacher
和 class之间使用双向关系Course
。
每个Course
包含一个复合主键。在我的示例中,我正在简化并且我正在使用仅使用一个属性的复合主键。
我的示例的目标是在保留课程对象时保留关联的教师。
Teacher
班级:
Course
班级:
那CoursePk
应该代表一个复合主键。
我的运行示例:
这样我的桌子看起来像:
课程表
教师桌
可以看到,老师的信息并没有持久化,只有id字段。
神奇的是,当我将级联类型更改为 时CascadeType.ALL
,一切都将保持不变。
有人可以解释为什么它不适用于 only CascadeType.PERSIST
.
java - 如何禁用 JPA 加入继承实体的删除级联?
我有三个实体。两者ResolvedCorpus
和UnqualifiedCorpus
都是Corpus
帮助建模和解决某些问题的子类Corpus
。
通过 JPA 为数据持久性选择联合继承类型。实体定义如下。
指定注释后,@OnDelete
我想实现以下目标:
- 当
ResolvedCorpus
通过 删除 a 时repository.delete()
,对应Corpus
的也会在 Table 中删除corpus
; - 当 a
UnqualifiedCorpus
通过 被删除时repository.delete()
,对应Corpus
的将保留。
但是,@OnDelete
不能按预期工作。顺便说一句,H2 用作嵌入式数据库。
测试代码复制如下。
您可以在此处找到测试应用程序。
我诊断了用于表创建和行删除的 DDL。我怀疑它@OnDelete
的目的是相反的,这意味着它控制子实体在基础实体对象被删除时的行为方式。调用时repository.delete(Resolved)
,生成的 DDLdelete from corpus
不是delete from resolved_corpus
; 和 for Unqualified
,delete from unqualified
和delete from corpus
都按顺序调用。
我想,像我这样的请求应该是 JPA 期望的合理功能,但是在网上搜索后我找不到合适的解决方案。
hibernate - @OneToOne 关系中的两个问题
我正在使用 Hibernate 4.3.6.Final 和 WildFly 16。@OneToOne 关系有两个问题。
1.) 第一个问题:Unknown mappedBy in: at.home.digest.model.Expose.home, 引用属性unknown: at.home.digest.model.Home.expose"}}
这些是我的实体:
公开实体:
部署应用程序后,我收到:
2.) 第二个问题:首先,我通过从 Expose 实体中删除属性 mappedBy = "expose" 来克服第一个问题,即 Expose 实体现在看起来像:
现在我不再面临第一个问题了。但是,当保存主实体时,它不再引用相应的公开实体。相反,SQL 表 home 中的字段 expose_id 为空。:
这是我保存实体的源代码:
具有对应暴露实体的主实体被保存而不引用对应的暴露实体,即主表中的expose_id列为空。但是,相应的暴露实体与对主实体的引用一起保存,即暴露表中的列 home_id 正确地引用了主表中的相应行。
java - 使用@ElementCollection 对实体进行级联删除
级联删除我的父实体时遇到问题:
org.postgresql.util.PSQLException:表“child”上的 UPDATE 或 DELETE 违反约束“XXX”:对于键 (id)=(4),表“child_properties”中有引用
我希望孩子删除它在 parentRepository.delete(parent) 上的属性,但这只会发生在 childRepository.delete(child) 上。父删除抛出异常
hibernate - Hibernate CascadeType.Persist 创建一个选择查询
我正在尝试保留与其他实体具有一对多关系的对象。使用CascadeType.ALL有效,但实际上我不想在删除主对象时删除该实体。因此我尝试使用CascadeType.PERSIST。但是当我使用它时,它会进行选择查询并说找不到该实体。那么为什么当我使用 cascadeType.PERSIST 时休眠会这样做。
这里基本上是我的课:
所以问题是为什么使用CascadeType.PERSIST不会保留 Address 元素并创建一个选择查询并说找不到该实体。为什么要使用它,我不想在删除员工时从地址表中删除实体。
注意:我在看这篇文章。尝试保存数据时找不到实体。但是我想知道为什么CascadeType.PERSIST不起作用。
java - Hibernate 在更新现有父实体时不会创建新的子实体
我有一个一对多的基数关系,如下所示 -
现在,我已经有一个有 2 个孩子的父母,我有一个对父母的更新调用,它正在更新父母中的一些信息并在父母中添加一个孩子。
上面的代码失败了,因为对于第三个孩子,hibernate 在保存到数据库时没有创建 ID。所以,我收到错误
即使使用 JPA Cascade 注释,也可以正常创建父级和新子级。在这里可以做什么?
注意:这是到休眠项目的 repo 层迁移,所以我试图避免逻辑上的变化,即为什么要在现有父级中保存新子级。我知道,最好先调用 save on child。
java - 具有多个级别的休眠级联删除
可悲的是,我找不到解决当前问题的方法。(如果我错过了什么,请发布链接)
我有一个多层实体结构如下
当我添加Parent.setOfChildA
和添加ChildB.grandchild
并且只保存父实体时,一切正常。
但是当我删除Parent.setOfChildA
和删除一些ChildB.grandchild
我得到以下异常
Hibernate 记录以下 sql 语句
有谁知道为什么添加有效但删除抛出异常?
您需要有关代码的更多信息吗?
spring-boot - 使用 Set<> persistentSet 异常的 Spring Boot 应用程序
我在尝试从数据库中获取 Set<> Collection 时遇到问题。这是代码的相关部分:
我试图将级联更改为 CascadeType.Persist 并且仍然遇到同样的问题。如果有人知道这个问题,我也很乐意了解我做错了什么以及 CascadeTypes 之间的区别(至少何时使用每个)。
这是我得到的 StackTrace:
谢谢 !
hibernate - 一对多级联所有 - 拯救儿童和家属
我有3个实体如下:
当我尝试使用自动生成的 Id 保存 Person 时,Person 和 Address 插入正确发生,但 AddressUse 插入失败,说 Address 没有 personId 字段。如果密钥不是自动生成的,我手动传递它,一切正常,但使用自动生成的 ID,级联失败。
我在 AddressUse 中设置了 Address ,反之亦然,我在 Address 中设置了 Person ,反之亦然。
响应中的错误是:
Key (person_id)=(0) is not present in table "Address" Error during managed flush [org.hibernate.exception.ConstraintViolationException: could not execute batch] insert into db.test.address_use
hibernate - Hibernate OneToOne 关系删除子实体导致删除整个父实体行
我的应用程序存在以下问题。
定义:我有 3 张桌子。用户、密码和确认令牌。用户表是父表。密码和确认令牌表是与用户表具有一对一关系的子表。用户和确认表 ID 作为外键存储在用户表中。
问题:
当用户激活他的帐户时,应从确认令牌表中删除确认令牌行。因此,用户表中的列也应该被删除。
我实现了什么:使用以下方案,发生的情况是,当我删除确认令牌时,整个用户行数据也会被删除,但密码行数据不会被删除。我想要的是,当确认令牌被删除时,应该只删除用户表中的相应行和外键列。
}