问题标签 [nhibernate-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.
hibernate - 使用级联删除时如何处理 Hibernate 中的可选关系?
很抱歉,如果这很明显,但我们已经为此绞尽脑汁好几天了。
考虑三个实体,Parent、Child 和 X:
Parent 与 Child 具有 @OneToMany 关系,设置为级联删除和孤儿删除 = true。
Child 与 Parent 有一个 @ManyToOne 关系,可选 = false,进一步的关系是 @NotNull 和 @JoinColumn 有 nullable = false。
X 与 Child 具有 @ManyToOne 关系,可选 = true。
这是我们在删除父对象时最理想的情况。我们希望删除级联并删除与已删除父级相对应的所有子行。到目前为止没有问题。但我们也希望任何引用任何已删除 Child 的 X 都将 Child 关系取消。我们不想删除任何 X,我们只想取消关系。这与它是一种“可选”关系是一致的。
我们如何在 Hibernate 中做到这一点?理想情况下,我们希望它是声明性的,这样我们的业务逻辑就不必“记住”来消除这些关系。事实上,如果我们要使用级联,它确实必须是声明性的,因为在我们遇到要取消的可选关系之前可能存在许多级别的级联。
有什么提示吗?我们被难住了......
join - 可选反向连接的级联删除
我们的实体类之一有以下简化映射:
基本上,它与关系另一端的外键是一对一的(这就是我们设置“逆”的原因)。此外,Parent 在 tOneToOneComponent 中可能没有任何记录(因此出现 optional="true")。
我知道,不推荐这样的连接,但我们的系统有点老旧,我们没有时间重新设计它。
我们希望 NHibernate 在 Parent 被删除时删除相关的 tOneToOneComponent。
当然,我们可以在 SQL 服务器上级联删除操作,但是我们需要清除 NHibernate 缓存以确保 tOneToOneComponent 不会停留在缓存中的某个位置。
因此,我们将 on-delete="cascade" 添加到但现在当我们删除 Parent 时,SQL 说:
看来,NHibernate 正试图以错误的顺序删除记录。
如何告诉 NHibernate 先删除 tOneToOneComponent (如果它存在),然后才删除父级?
nhibernate - 在 Fluent NHibernate 中使用具有完整性约束的 HasMany 关系上的复合 ID 进行级联删除
我有一个错误,无论我用多少谷歌搜索它,我都找不到修复它。我已阅读并尝试使用以下主题来解决它。这些是我发现的与我的问题最接近的:
数据库架构
我的映射涉及四个表:Member
、Vehicle
和。MemberVehicles
LastUsedVehicles
- 表
Member
和Vehicle
是应用程序中的业务对象。 - 表是一个没有额外列
MemberVehicles
的关联表 ( )。many-to-many
这种关系没有问题。 - 表
LastUsedVehicles
有一个由Vehicle_uid
和组成的组合键Member_uid
,它们是对应表的外键。该表还有一个额外的DateLastUsed
列来存储时间戳。 这个表的映射是我的问题。
问题
当我删除 aMember
时,我Vehicle
还需要删除他的LastUsedVehicles
所有工作)。
当我执行此代码时...
...我收到此错误:
System.Exception:在 UnitOfWork 期间尝试提交失败;由于以下错误,事务被回滚:字典中不存在给定的键。----> System.Collections.Generic.KeyNotFoundException :字典中不存在给定的键。
LastUsedVehicles
当表为空时,我没有收到错误消息。
映射
成员
车辆
最后使用的车辆
课程
成员
车辆
最后使用的车辆
调试信息
为了更清楚,我还附上了一些 SQL 查询及其结果。
一旦表LASTUSED_VEHICLES
为空,我可以删除一个成员。
很抱歉帖子的长度,但这种情况似乎很独特。感谢您的关注。
nhibernate - 清除集合时对子项进行 NHibernate Cascade Delete
我已经搜索了很多地方,但仍然找不到我正在寻找的答案。
我正在使用 NHibernate 3.2 - 代码映射
我有以下映射文件:
级联保存工作正常。
当我尝试打电话时:
实体与父实体保持关联。
我通过调用它来工作:
我希望有一种方法可以拯救父母吗?
干杯,
詹姆士
nhibernate - NHibernate 防止级联删除
假设我有一个班级 Foo。我对 Foo 也有一个名为 Foo_Foo 的视图,它列出了 Foo 之间的多对多关联。我将此关联映射为每个 Foo 上的简单不可变集,其中 cascade="none":
但是,当我尝试删除 Foo 时,NHibernate 尝试并正确地未能删除 Foo.association。
如何防止 NHibernate 尝试删除与视图的关联?
nhibernate - 多对多:删除一侧,关系条目但不要删除另一侧
我想删除一个有很多用户组但这些用户组不完全属于这个用户的用户:其他用户也可以使用这个用户组。即使没有用户引用它们,用户组也可以存在。
我想映射多对多关系,以便如果删除用户,关系会自动删除,而不是用户组?
我尝试Cascade.All
了,因为我认为多对多的级联会影响关系,但不会影响另一方。我以为只会Cascade.AllDeleteOrphan
做对方删除。显然我错了。
看来我不理解级联规则。有人可以向我提供一个明确的解释,也许还能达到我的目标吗?
谢谢
c# - NHibernate 具有级联删除的多集合失败
目标:
创建一个父子关系,这样对父子列表的修改将传播到所有子节点,并让 NHibernate 完成繁重的工作。父子关系将Has-Many
在自引用表上。
问题:
删除父(根)对象的任何尝试都会导致异常,而不是删除子对象的预期行为。
我正在使用的东西的版本:
Microsoft SQL Server Management Studio 版本 10.0.4064.0
FluentNHibernate 版本 1.3
NHibernate 版本 3.2.0.4
下面是我用来复制此行为的一组当前类对象和表结构。
使用上面的表和类,将级联更改为这些选项并在测试的拆卸期间执行指定的,这些就是结果。
使用 Cascade.AllDeleteOrphan:
只需在父对象上调用 delete 我得到这个异常:
在遍历每个孩子之后,递归地挖掘这些孩子的孩子并尝试从下往上删除每个孩子:
在遍历孩子之后,清除他们的每组孩子,然后保存/删除父母我得到这个异常:
使用 Cascade.All,只需在父对象上调用 delete,我就会得到这个异常:
与 Cascade.AllDeleteOrphan 相同
在遍历每个孩子之后,递归地挖掘这些孩子的孩子并尝试自下而上删除每个孩子:
与 Cascade.AllDeleteOrphan 相同
遍历孩子,清除他们的每组孩子,然后保存/删除父我得到这个异常:
没有例外:父母被正确删除但现在我有我不想要的孤立对象!
我浏览了许多博客/stackoverflow 问题/资源文档,但还没有真正看到这个问题的解决方案。
以下是我已经挖掘的一些链接:
- 如何使用 FluentNHibernate 删除引用的对象(旧的“删除的对象将被级联重新保存”)
- 级联错误:删除的对象将被级联重新保存
- 使用自动映射器使用级联删除设置 Fluent NHibernate 一对多
- 键多对一和键属性关联:nhibernate 不会从集合中删除项目
- https://nhibernate.jira.com/browse/NH-1050
(注意我有空 FK) - 行被另一个事务更新或删除(或未保存的值映射不正确)
(注意我使用时间戳乐观版本控制) - https://forum.hibernate.org/viewtopic.php?t=933496(ernst_pluess
关于 cascade=all 的评论引发了关于使用 HiLo 的警告标志,但是 HiLo 是生成还是分配?因为从技术上讲,NHibernate 生成它然后分配它.. .) - 在 NHibernate 中删除子记录的异常
(看起来我必须手动删除所有子对象,这消除了级联的目的!!)
许多帖子都提到了反转关系,但设置 .inverse 并让孩子拥有这种关系完全不是这里的目标!
我不知道我错过了什么,但希望这是我忽略的非常容易解决的问题。任何帮助都感激不尽!
c# - 休眠映射,级联,逆,更新,插入?
我有一个 EmployeeMonth 对象,它保存计算出的员工获得的奖金和积分。在 EmployeeMonth 对象中有一个 BonusMonth 对象。BonusMonth 对象设置员工每月必须达到的间隔才能获得奖金(此对象每月设置,不应更改)。
当我通过减少重新计算奖金时,例如:88%,我调整 BonusMonth 对象间隔,然后重新计算奖金。然后将新的奖金(结果)保存在同一个 EmployeeMonth 对象中。
然后当我保存新的 EmployeeMonth 时,BonusMonth 也会被保存。
如何配置休眠映射以便不保存 BonusMonth?我只想更新/保存重新计算的 EmployeeMonth 值。
这就是我的映射的样子:
EmployeeMonth.cs
BonusMonth.cs
EmployeeMonth.hbm.xml
BonusMonth.hbm.xml
nhibernate - 为什么级联 SaveUpdate 会触发 Delete 语句?
这与我之前提出的这个问题有关。
在Request
映射中,我将其设置为SaveUpdate
到期,在Discount
映射中,我将级联设置为无。
有两种情况:
首先是新要求和新折扣。创建两者,然后将折扣添加到请求并保存请求;这按预期工作。
下一个场景是新请求和现有折扣。这不正常,我不确定为什么。以下是测试中运行的 SQL 语句(省略值):
/li>
最后一行是问题:它会返回并从第 3 行删除插入。我应用于 Request 对象的命令是session.Save(request);
,仅此而已。
是否有任何理由调用删除?
编辑:
更新代码
折扣映射
请求映射
ttp://stackoverflow.com/questions/14837373/zero-to-one-relationship-nhibernate-mapping
fluent-nhibernate - 流利的休眠一对多父删除
我们有 2 个班级,Parent 和 Child
父级没有对子级的引用,子级在其流利映射中定义了以下内容:
删除父记录时,会产生以下错误:
考虑到父模型没有子类型的属性集合,启用删除父模型的正确映射是什么?