问题标签 [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 - 更新分离对象时,Hibernate 可以删除孤立的集合吗?
cascade=all,delete-orphan
我知道删除孤立的子对象是 SO上的一个常见问题,也是 Hibernate 新手的常见问题,并且相当标准的答案是确保您对子集合有一些变化cascade=all-delete-orphan
。
我希望能够让 Hibernate 检测到子集合已从父对象中清空/删除,并在更新父对象时从数据库中删除子表中的行。例如:
我当前的Parent
班级映射如下所示:
这在更新附加对象时对我来说很好,但我有一个用例,我们希望能够获取一个分离的对象(远程客户端通过 HTTP/JSON 将其发送到我们的 API 方法),并将其直接传递给 Hibernate Session - 以允许客户端能够以他们喜欢的任何方式操作父对象并保持更改。
当调用session.update(parent)
我的分离对象时,子表中的行是孤立的(FK 列设置为空)但没有被删除。请注意,当我调用时session.update()
,这是 Hibernate Session 第一次看到这个对象实例——我没有以任何其他方式重新附加或合并对象与 Session。我依靠客户端传递标识符对应于数据库中实际对象的对象。例如,我的 API 服务方法中的逻辑是这样的:
当传递给时,Hibernate 是否可以检测分离的父对象中的孤儿集合session.update(parent)
?还是我以某种方式误用了分离的对象?
我希望我可以避免与 Hibernate 进行任何类型的复杂交互,以将更改持久保存到分离的实例。我的 API 方法在调用 之后不需要进一步修改分离的对象session.update(parent)
,该方法只负责持久化远程客户端应用程序所做的更改。
grails - Grails 多对多关联和防止级联
因此,我们在客户和角色之间建立了多对多关系,设置为:
Role 对象只有一个名称和一组权限。我们不想从 Customer -> Role 级联保存,因为 Role 只能直接修改。
我补充说:
但是,每当我创建客户时,角色表也会更新。没有任何变化,只是版本号增加了。
我是否遗漏了需要设置的其他内容...在 Grails 中设置了多少对多关系和级联是否存在错误...或者是否有其他方法可以防止角色每次都被更新?
nhibernate - nhibernate(或休眠)条件级联
我有一个用户类,它有一个属性事件,它有很多会话。基本上,用户注册一个有很多会话时间的事件。
用户可以注册一个活动,但会议时间纯粹是提供信息。
但是当我使用 NH 将用户写入数据库时,它也会更新会话时间。我如何防止这种情况发生,因为我知道在创建/更新事件时仍然需要插入/更新会话时间。
java - 试图了解 CascadeType.ALL 与 @OnDelete 的区别!
让我直接回答我的问题,如果实体被删除,使用@OnDelete
这里将删除这个实体和任何其他实体?我只是无法从Hibernate 的注释参考中理解一件事。所以我需要你的帮助来确认我理解正确。InventoryPreference
Inventory
如果实体被删除,我是否也Inventory
需要在实体中使用CascadeType.ALL
来InventoryPreference
删除所有 s Inventory
?
如果第一个问题是真的,那么我看不出CascadeType.ALL
. 如果不是,那么这些中的每一个都做了什么以及我需要指定哪些注释和配置才能在InventoryPreference
删除时Inventory
删除 s?Inventory
哦,如果被删除,我不希望InventoryPreference
被删除。对不起,如果它太明显了。
java - 如果没有插入子实体如何级联,否则没有级联
我们目前正在使用接缝框架。我们在注释实体时遇到了一些麻烦。我们有一个 Deal 实体,它有一个 Tag 实体子实体。我们将实体注释如下;
并且标签实体是这样的;
用例是;我们有默认值来标记交易。用户通过自动完成输入框搜索标签。如果不匹配,他/她会键入自己的免费标签。当他/她持久化交易实体时,如果数据库中没有存储标签,则标签实体将被持久化,否则将存储的标签实体引用到交易实体。
我们可以注释符合这个用例的实体吗?还是关于业务逻辑?
hibernate - 如何正确设置 Hibernate 级联
我有以下设置
A -> B -> C
A-映射:
乙:
物质识别I18n:
当我通过插入带有完整对象图的新 A 时
一切都正确创建。
但是如果我使用
我得到一个DataIntegrityException
当我查看 log4j 日志时,我看到了merge
- 它插入
B
- 它插入
B18n
有了saveOrUpdate
它
- inserts
B18n
,这显然会导致异常
这是定义的(预期的)行为还是我的设置有问题。
hibernate - Hibernate @OnDelete 级联同一张表
我正在尝试创建一个捕获父子关系的表,例如一棵树。我想只保留两列来捕获这个结构“id”和“parent”。我希望数据库能够在删除一行时级联删除所有子项。下面是我创建的 Hibernate 实体,我添加了注释@OnDelete(action = OnDeleteAction.CASCADE)
,但是ON DELETE CASCADE
当 Hibernate 创建表时,它没有添加到表中。
这是一个错误吗?还是有什么我遗漏或不理解的地方?
java - Hibernate:双向一对多外键约束失败
我想使用 Hibernate(在 Java 中)实现一对多关系。我有两个实体:
- 实验
- 实验组
Experiment
有很多ExperimentGroups
。我尝试按照 Hibernate 官方文档推荐的方式配置这种一对多关系:http: //docs.jboss.org/hibernate/core/3.6/reference/en-US/html/example-parentchild.html#示例父子级联
我的配置文件:
添加一个新ExperimentGroup
的Experiment
工作正常,但删除一个实验(及其所有实验组)会导致异常:
无法删除或更新父行:外键约束失败 (
testdb
.ExperimentGroup
, CONSTRAINTFK9C71D86238B5500C
FOREIGN KEY (Experiment_id
) REFERENCESExperiment
(id
))
我的 ExperimentDAO 代码如下所示:
编辑: 创建 Experiment 和 ExperimentGroup 的 DAO 代码:
实验还有许多其他属性,例如名称、描述等,我已从配置文件中删除了这些属性,因为它们对一对多关系没有影响。
有什么建议吗?我做错了什么?
hibernate - 休眠、单向多对一和对“删除级联”功能的渴望
我有一个与这里提出的问题相同的问题:how to define an inverse cascade delete on a many-to-one mapping in hibernate
搜索了一段时间后,我找不到合适/干净的解决方案。我不能让父实体对子实体有 @OneToMany,因为它们位于不同的模块中。我想尝试在父级之前删除子级的 EntityListener,但我不能,因为它们位于不同的模块中。
有谁知道一个干净的解决方案?我正在考虑使用 AspectJ 来监听来自 ParentDao 的 delete 方法的调用,但这不是一个干净的解决方案,我必须为每个与 Parent 类有这种关系的实体实现一个。
这种级联似乎是一个基本功能,看到hibernate不支持它我有点失望:/
java - 保存更新时休眠 NonUniqueObjectException
我有这个简单的情况:
插入新客户的例程:
我该如何解决这个问题?我认为这个问题与 CascadeType.SAVE_UPDATE 有关,但我需要它......谢谢大家。
更新
我发现了问题,这是如何复制它:
因此,如果 p 和 p 1 具有不同的类别,则没有问题,但是如果 p 和 p1 具有相同的类别,我在类别上有 NonUniqueObjectException 因为相同的类别在会话中并且休眠尝试保存_更新它。
我在 Product 和 Category 实体中都需要 CascadeType.SAVE_UPDATE,那么我该如何解决这个问题?谢谢。