Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >nHibernate Cascade="Delete-Orphan“用于多个键

nHibernate Cascade="Delete-Orphan“用于多个键
EN

Stack Overflow用户
提问于 2014-11-24 20:18:32
回答 1查看 274关注 0票数 0

假设我有以下3张表:

表A、表B和表C。

表C有表A的外键。表C有表B的外键。

当我从表B中删除一行时,我希望它删除表C中的孤儿,但只有当它不包含对表A的任何引用时,我希望它删除表B中的行,并在表C中将外键设置为null。

这可能吗?它的默认行为是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-24 21:29:41

您的场景是典型的“业务需求”,而不是“级联”需求。

正如这里详细讨论的那样:When/Why to use Cascading in SQL Server? (SQL梯级删除/ NHibernate级联删除的机制相同)

  • ..。
  • 当关系的语义涉及到“是”描述的一部分时,级联删除可能是有意义的。例如,OrderLine记录是它的父订单的一部分,OrderLines永远不会在多个订单之间共享。如果命令消失了,OrderLine也应该会消失,没有订单的行将是一个问题。
  • Cascade Delete的典型示例是SomeObject和SomeObjectItems,如果没有相应的主记录,项记录的存在就没有任何意义。
  • ..。

同样,虽然这些都是关于server上的特性的,但它们也适用于NHibernate级联特性。

因此,在您的例子中,删除有一个相当复杂的逻辑,答案应该是:

  • 将删除定义移出数据层(NHibernate映射)
  • 将其放置在业务层中。在此基础上创建规则,在测试中确保您的逻辑工作正常(不管是否使用持久性引擎,即NHibernate)。
  • 未来利润从您/自定义删除逻辑,一旦用户将调整他们的需求。你不会受到NHibernate的限制.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27118745

复制
相关文章
主外键关联删除(on delete set null和on delete cascade)
主外键关联,当删除的是父表数据,参照这些要删除的数据,Oracle有三种处理方式:
bisal
2019/01/29
2.9K0
Flask 学习-84.Flask-SQLAlchemy 一对多关系级联删除
前言 一对多关系,当删除主表数据的时候,关联表数据一起删除掉 一对多 模型设计 class Person(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50)) addresses = db.relationship('Address', backref='person', cascade="all,delete") class Address(db.Model)
上海-悠悠
2022/10/09
6420
day31_Hibernate复习_03(补刀)
一、多对多 在对象中如何表达多对多关系: 两方都使用集合表达。即两个对象中互相持有对方的集合的引用。 小结: <set name="本方引用的集合名称" table="中间表表名" > <key column="本方中间表列名称" /> <many-to-many class="对方的完整类名" column="对方中间表列名称" /> </set>
黑泽君
2018/10/11
4980
day30_Hibernate复习_02
对象的三种状态:     瞬时状态:没有ID,不在Session缓存中     持久状态:有ID,在Session缓存中     游离状态:有ID,不再Session缓存中 特性:持久状态的对象,会自动将对象的变化同步到数据库中。 一级缓存:     是线程级别的缓存,在Session对象中。     本质:Map集合。     缓存的内容:对象。     目的:减少sql语句发送,提高效率。 快照:在事务提交之前,先对比快照与缓存中的对象,来决定是否需要更新数据库。 细节:save和persist的区别?     HQL、SQL、Criteria查询与缓存的关系 其他api:     evict(); 将缓存中的对象移除     clear(); 清空一级缓存     refresh(Object); 刷新 => 强制刷新缓存中的对象 => (可以用来解决缓存与数据库数据不同步的问题(局部解决))     flush(); 对比快照,并提交缓存对象     saveOrUpdate(Object); 可以同时完成保存或更新操作
黑泽君
2018/10/11
3060
day30_Hibernate复习_02(补刀)
对象的三种状态:     瞬时态:对象刚刚创建,没有与session关联,没有ID     持久态:已经和Session关联,有ID     游离态:没有和session关联,有ID     瞬时=>持久   save/persist     瞬时=>游离   setId     持久=>游离   close/evict/clear     持久=>瞬时   close/evict/clear 再 将ID设置为null     游离=>瞬时   将ID设置为null     游离=>持久   update/saveOrUpdate 持久状态的特性:持久对象的所有变化,会被自动同步到数据库中。 一级缓存:     Hibernate中有两种缓存:线程级别的session缓存 和 进程级别的sessionFactory缓存(不久就会学到啦)   在Session对象中,有一个缓存。 本质:Map集合、键是ID、值是对象,Hibernate会把所有查询到的对象,放入缓存中。         如果再次查询相同的对象,会先从缓存中找。目的:为了提高效率。 快照:快照是为了对比缓存中的对象是否发生变化,来决定事务提交时,是否需要修改数据。 其他api:     evict();    将缓存中的对象移除     clear();    清空一级缓存     refresh(Object);    刷新 => 强制刷新缓存中的对象 => (可以用来解决缓存与数据库数据不同步的问题(局部解决))     flush();    对比快照,并提交缓存对象     saveOrUpdate(Object);    可以同时完成保存或更新操作     save/persist     HQL/SQL/Criteria与缓存的关系 => 查询到的对象会放入缓存中,但是每次查询都要发送sql语句。
黑泽君
2018/10/11
3680
《Java从入门到放弃》框架入门篇:hibernate中的多表对应关系(二)
前一篇讲完了一对多的关系,通过与JDBC对比应该能发现,是不是比JDBC简单了很多? 我们只需要把对象只间的包含或对应关系理清楚,完全不用我们自己来写SQL语句。所以使用hibernate框架后,我们的关注重点是业务逻辑,所有的SQL语句都不用再操心了。 上次忘记说明,如果使用增、删、改的操作,我们还需要再引入一个Transaction对象。代码如下所示:     public static void main(String[] args) {         Session session = Hiber
十方上下
2018/06/14
5690
Cascade-DETR
Cascade-DETR: Delving into High-Quality Universal Object Detection
iResearch666
2023/09/13
4170
Cascade-DETR
Hibernate学习笔记2
定义hbm.xml映射文件和pojo类时都需要定义主键,Hibernate中定义的主键类型包括:自然主键和代理主键:
Java学习
2018/07/25
1.4K0
Hibernate学习笔记2
NHibernate 缓存
一级缓存就是 ISession 缓存, 在 ISession 的生命周期内可用, 多个 ISession 之间不能共享缓存的对象, 通过 ISessionFactory 创建的 ISession 默认支持一级缓存, 不需要特殊的配置。 在 NHibernate 的参考文档中, 对 ISession 的描述如下:
beginor
2020/08/06
6130
Nhibernate_nhibernate与ef区别
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说Nhibernate_nhibernate与ef区别,希望能够帮助大家进步!!!
Java架构师必看
2022/07/19
6040
C# 数据操作系列 - 12 NHibernate的增删改查
上一篇《C# 数据操作系列 - 11 NHibernate 配置和结构介绍》 介绍了Nhibernate里的配置内容。这一篇将带领大家了解一下如何使用NHIbernate。之前提到NHibernate继承了Hibernate的一些传统:使用XML文件进行配置,这一点也是备受争议。不过,有社区爱好者开发了一个名为《Fluent NHibernate》的项目,用来支持NHibernate的流式配置。当然,NHibernate本身也提供了NHibernate.Mapping.ByCode模式。不过这一篇暂且略过,留待下文。
程序员小高
2020/05/26
1.2K0
One to One 的数据库模型设计与NHibernate配置
在数据库模型设计中,最基本的实体关系有三种:一对一、一对多、多对多。关于一对多和多对多使用的情况较多,之前也有过一些讨论,现在来说明一下在数据库中一对一的模型设计。
深蓝studyzy
2022/06/16
4930
day30_Hibernate学习笔记_02
对象状态 瞬时态|临时态:Transient     1、没有与Hibernate产生关联(没有与Session有关联)。     2、与数据库中的记录没有产生关联,即对象没有ID(有关联:就是与数据库中的ID有对应)。 持久态:Persistent     1、与Hibernate有关联(与session有关联)。     2、对象有ID。 游离态|脱管态:Detached     1、没有与Hibernate产生关联。     2、对象有ID。 三种状态转换如下图所示:
黑泽君
2018/10/11
1.1K0
day30_Hibernate学习笔记_02
NHibernate教程
在今日的企业环境中,把面向对象的软件和关系数据库一起使用可能是相当麻烦、浪费时间的。NHibernate是一个面向.Net环境的对象/关系数据库映射工具。对象/关系数据库映射(object/relational mapping (ORM))这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。 NHibernate除了能将一张表映射为一个对象,还可以将表间关系变为对象的属性。例如学生和课程间的多对多关系就可以转化为学生类中的一个课程集合的属性。由此可见,NHibernate不仅仅管理.Net类到数据库表的映射,还提供数据查询和获取数据的方法。因此采用NHibernate,可以大幅度减少开发时人工使用SQL处理数据的时间。
全栈程序员站长
2022/09/14
3900
NHibernate分页
转载:http://www.cnblogs.com/tenghoo/archive/2011/02/14/1954393.html
跟着阿笨一起玩NET
2018/09/19
4720
NHibernate 缓存
一级缓存就是 ISession 缓存, 在 ISession 的生命周期内可用, 多个 ISession 之间不能共享缓存的对象, 通过 ISessionFactory 创建的 ISession 默认支持一级缓存, 不需要特殊的配置。 在 NHibernate 的参考文档中, 对 ISession 的描述如下:
全栈程序员站长
2022/09/19
4440
flask 数据库进阶(flask 30)
级联: class Witer(db.Model): books=db.relationship('writer',cascade='save-update,merge,delete')
用户5760343
2019/08/13
3650
[原创]Fluent NHibernate之旅(四)-- 关系(上)
经过了前面三篇的介绍,相信大家对Fluent NHibernate已经有一定的了解了,在我们学习中,Fluent 也已经进入了RTM版本。这次的版本发布离RC版只有半个月不到,修正了很多bug,同时补充了大量的功能,在每天更新中,也看到了大量的单元测试,我们相信Fluent NHibernate 已经相对稳定成熟了。RTM相对于RC版本来说,使用方法没有太大的变化,所以不做讲解。 我们后面的教程,会使用RTM版本来演示,希望大家能及时更新(点击下载最新版)。 Fluent NHibernate之旅系列导航
脑洞的蜂蜜
2018/02/02
1.2K0
[原创]Fluent NHibernate之旅(四)-- 关系(上)
NHibernate VS IbatisNet
  NHibernate是当前最流行的Java O/R mapping框架Hibernate的移植版本,当前版本是1.0 .2。它出身于sf.net..IbatisNet是另外一种优秀的Java O/R mapping框架,当前版本是1.2。目前属于apache的一个子项目了。 相对NHibernate“O/R”而言,IbatisNet是一种“Sql Mapping”的ORM实现。 NHibernate对数据库结构提供了较为完整的封装,NHibernate的O/R Mapping实现了PO 和数据库表之间
张善友
2018/01/31
7640
NHibernate详解
NHibernate 是一个基于.Net 的针对关系型数据库的对象持久化类库。Nhibernate 来源于非常优秀的基于Java的Hibernate 关系型持久化工具。 NHibernate 从数据库底层来持久化你的.Net 对象到关系型数据库。NHibernate 为你处理这些,远胜于你不得不写SQL去从数据库存取对象。你的代码仅仅和对象关联,NHibernat 自动产生SQL语句,并确保对象提交到正确的表和字段中去。
全栈程序员站长
2022/09/18
7130

相似问题

如何用cascade="all,delete-orphan“复制hibernate集合

30

NHibernate映射未将ON DELETE CASCADE选项添加到外键引用

34

nhibernate“cascade=”所有删除-孤儿错误

22

流畅的Nhibernate Cascade.None()导致HasOne外键关系不能持久

10

delete cascade上update cascade的外键约束

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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