首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当有外键但引用的行不存在时,是否可以避免NHibernate.ObjectNotFoundException?

当有外键但引用的行不存在时,可以避免 NHibernate.ObjectNotFoundException。

NHibernate.ObjectNotFoundException 是 NHibernate 在尝试加载一个对象时,如果找不到相关联的对象时抛出的异常。为了避免这个异常,可以使用以下方法:

  1. 使用 FetchMode.Join 或 FetchMode.Select 来加载关联对象。这样可以确保 NHibernate 在查询时就加载了所有相关联的对象,从而避免了找不到对象的异常。
  2. 在查询中使用 left join 或 left outer join 来加载关联对象。这样可以确保查询结果中包含了所有的对象,即使关联对象不存在。
  3. 在映射中使用 not-found="ignore" 属性。这样可以告诉 NHibernate 在找不到关联对象时不抛出异常,而是返回 null。

以下是一个示例映射,其中使用了 not-found="ignore" 属性:

代码语言:xml<class name="Parent">
复制
  <id name="Id">
   <generator class="native"/>
  </id>
  <many-to-one name="Child" column="ChildId" not-found="ignore"/>
</class>

这样,当找不到 Child 对象时,NHibernate 不会抛出 NHibernate.ObjectNotFoundException 异常,而是返回 null。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SQL命令 CREATE TABLE(五)

字段(CustomerNum)和引用字段(CustID)可以不同名称(或相同名称),必须具有相同数据类型和字段约束。...SQL支持以下引用操作: NO ACTION SET DEFAULT SET NULL CASCADE NO ACTION-删除或更新被引用表中键值,将检查所有引用表,以查看是否任何引用要删除或更新...SET NULL-删除或更新被引用表中键值,将检查所有引用表,以查看是否任何引用要删除或更新。如果是,则该操作会导致引用要删除或更新字段设置为NULL。字段必须允许空值。...SET DEFAULT-删除或更新被引用表中键值,将检查所有引用表,以查看是否任何引用要删除或更新。如果是,则该操作会导致引用要删除或更新字段设置为该字段默认值。...如果是这样,则删除操作会导致其外字段引用要删除也被删除。 在被引用表中更新键值,将检查所有引用表,以查看是否任何引用要更新

1.8K50

【MySQL 系列】MySQL 语句篇_DDL 语句

DROP SCHEMA 是一样;② DROP DATABASE 关键字后指定要删除数据库名称;③ IF EXISTS 选项可以避免删除不存在数据库发生错误。...相对于主键而言,用来引用其他表。通过子表一个或多个列对应到父表主键或唯一键值,将子表和父表建立起关联关系。 例如,Sakila 示例数据库中 country 表和 city 表。...你也不能为一个城市设定一个不存在 country_id,否则这个城市数据就是错误。 3.2.1、创建 通常,所属表被称作子表,被引用表被称作父表。...它可以通过名字删除任何约束,并不仅仅是; 3.2.4、CASCADE 策略 如果 ON DELETE 和 ON UPDATE 使用了 CASCADE 策略: 父表被删除时候,子表中匹配也会被删除...父表键值更新时候,子表中匹配字段也会被更 3.3、唯一约束 唯一约束与主键约束一个相似的地方,就是它们都能够确保列唯一性。

25210
  • 从零开始学PostgreSQL (十四):高级功能

    行为可以根据你应用程序需求进行精细调整。在本教程中,我们仅展示了这个简单例子,更多关于信息可以在第五章中找到。...使用案例:通过将 weather 表中 city 字段定义为参照 cities 表中 name 字段可以自动阻止向 weather 表中插入不存在于 cities 表中城市名称。...错误处理:尝试插入不匹配约束数据,PostgreSQL 将返回错误信息,指出违反了约束,并提供详细错误细节。...行为调整:行为可以依据具体需求进行调整,例如在删除或更新主表中记录对外影响策略。...窗口函数在非窗口聚合函数之后执行,意味着可以在窗口函数参数中使用非窗口聚合函数。 高级用法: 可以在WINDOW子句中命名窗口框架,然后在多个OVER子句中引用避免重复定义相同窗口行为。

    10110

    mysql面试题目及答案_docker 面试题

    触发器是在一个修改了指定表中数据执行存储过程。通常通过创建触发器来强制实现不同表中逻辑相关数据引用完整性和一致性。...使两张表形成关联,只能引用外表中列值;优点:由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据完整性,而用即使在数据库服务器当机或者出现其他问题时候,也能够最大限度保证数据一致性和完整性...有主外数据库设计可以增加ER图可读性,这点在数据库设计时非常重要。在一定程度上说明业务逻辑,会使设计周到具体全面。...因为不符合以上条件时候,会影响业务扩展和修改,数据量庞大,会严重影响增删改查效率。 27.什么叫视图?...游标是什么 视图是一种虚拟表,具有和物理表相同功能;可以对视图进行增,改,查,操作,视图通常是一个表或者多个表或列子集。对视图修改不影响基本表。它使得我们获取数据更容易,相比多表查询。

    1K20

    php面试题目2020_php算法面试题及答案

    缓冲区达到最大值后,回收算法会循环遍历zval,判断其是否为垃圾,并进行释放处理。 17、如何实现PHP安全最大化?怎样避免SQL注入漏洞和XSS跨站脚本攻击漏洞?...定义: 主键–唯一标识一条记录,不能有重复,不允许为空 –表是另一表主键, 可以重复, 可以是空值 索引–该字段没有重复值,但可以一个空值 作用: 主键–用来保证数据完整性...–用来和其他表建立联系用 索引–是提高查询排序速度 个数: 主键–主键只能有一个 –一个表可以多个 索引–一个表可以多个唯一索引 31、简述 private、 protected...但是对于使用额外InnoDB特性(例如)表不适用; H、MyISAM支持表锁,InnoDB支持锁。...InnoDB:支持事务、等特性、数据锁定。空间占用大,不支持全文索引等。

    3.1K20

    SQL命令 INSERT(三)

    插入不能包含值违反引用完整性字段,除非指定了%NOCHECK关键字,或者是用NOCHECK关键字定义。...参照完整性 如果没有指定%NOCHECK关键字, IRIS将使用系统范围配置设置来确定是否执行引用完整性检查; 默认值是执行引用完整性检查。...您可以在系统范围内设置此默认值,如引用完整性检查中所述。 要确定当前系统范围设置,调用$SYSTEM.SQL.CurrentSettings()。...此设置不适用于用NOCHECK关键字定义。 在INSERT操作期间,对于每个引用,都会在引用表中相应上获得一个共享锁。 在执行引用完整性检查和插入该行时,此行被锁定。...这确保了引用不会在引用完整性检查和插入操作完成之间发生更改。 但是,如果指定了%NOLOCK关键字,则不会对指定表或引用表中相应执行锁操作。

    2.4K10

    《Oracle性能优化求生指南》-第四章:数据库逻辑设计和物理设计-学习小结-1

    不存在仅依赖部分主键实体数据。 不存在依赖于其他非主键实体数据。 用一条格言描述:”,完整,除了没有其他东西。...是由实体中具有唯一性自然属性构成。 如果自然被更新,则引用也需要更新,这将显著增加IO开销和锁争用。...如果该列数值大部分是NULL,并且查询仅需检索非NULL值,则该列上索引会比较紧凑并很高效。 因此,决定一列是否可以为NULL时候,要考虑在该列上是否有使用B*树索引查询NULL需求。...这种情况,使用NULL必要查询不能快速返回那些AGE不确定记录,要么进行反规范化,增加一个标记列来标记年龄是否已知,并在该标记列上建立索引,以便于查询AGE不确定(AGEKNOWN=N)记录...保持较短行长度对事实表来说是重要,因为事实表上会经常有全表(或分区)扫描。 24、尽量避免使用雪花模式。维度表不包括时候,查询性能通常会得到优化。

    1.7K40

    SQL命令 DELETE(一)

    如果删除指定之一会违反引用完整性(并且未指定%NOCHECK),则删除操作将发出SQLCODE-124错误。此默认行为是可修改,如下所述。...参照完整性 如果不指定%NOCHECK, IRIS将使用系统范围配置设置来确定是否执行引用完整性检查;默认情况下执行引用完整性检查。可以在系统范围内设置此默认值,如引用完整性检查中所述。...要确定当前系统范围设置,请调用$SYSTEM.SQL.CurrentSettings()。 在删除操作期间,对于每个引用,都会在被引用表中相应上获取一个共享锁。此行将被锁定,直到事务结束。...如果使用%NOLOCK对使用CASCADE、SET NULL或SET DEFAULT定义字段执行DELETE操作,则也会使用%NOLOCK执行相应更改引用操作。...几种可能策略可以避免这种情况:(1)提高锁升级阈值,使锁升级不太可能在事务内发生。(2)大幅降低锁升级阈值,使锁升级几乎立即发生,从而降低其他进程锁定同一表中记录机会。

    2.7K20

    为什么数据库不应该使用

    表中数据,检查 posts 中是否存在引用当前记录; 作为专门用于管理数据系统,数据库与应用服务相比能够更好地保证完整性,而上述这些操作都是引入带来额外工作,不过这也是数据库保证数据完整性必要代价...authors 表中记录主键,数据库会同时更新 posts 表中所有引用该记录客户端删除 authors 表中记录,数据库会删除所有与 authors 表关联记录; 不过无论是执行更新还是删除操作...,数据库都可以保证各个关系表之间引用一致性和合法性不会出现引用不存在记录情况,与 RESTRICT 行为一样,所有更新和删除行为都可以通过执行额外检查和操作保证数据一致。...总结 提供几种在更新和删除不同行为都可以帮助我们保证数据库中数据一致性和引用合法性,但是使用也需要数据库承担额外开销,在大多数服务都可以水平扩容今天,高并发场景中使用确实会影响服务吞吐量上限...: RESTRICT 会在更新和删除关系表中数据对外约束合法性进行检查,保证不会引用不存在记录; CASCADE 会在更新和删除关系表中数据触发对关联记录更新和删除,在数据量较大数据库中可能会有数量级放大效果

    3.2K10

    SQL表之间关系

    SQL表之间关系要在表之间强制执行引用完整性,可以定义。修改包含约束,将检查约束。定义几种方法可以在InterSystems SQL中定义可以定义两个类之间关系。...引用完整性检查约束可以指定更新或删除引用操作。 在CREATE TABLE reference action子句中描述了使用DDL定义这个引用操作。...默认情况下,删除带有行时,InterSystems IRIS将在相应引用上获取长期(直到事务结束)共享锁。这样可以防止在引用DELETE事务完成之前对引用行进行更新或删除。...这样可以防止删除引用,然后回退删除引用情况。如果发生这种情况,引用不存在。...LineItem'引用父表中不存在。在子表上插入操作期间,在父表相应上获得共享锁。 在插入子表行时,该行被锁定。 然后,锁被释放(直到事务结束才被持有)。

    2.5K10

    【重学 MySQL】六十六、约束使用

    CASCADE: 含义:主表中记录被删除或更新,子表中所有引用该记录记录也会被相应地删除或更新。...如果希望保留子表中记录,字段设置为NULL以表示不再引用主表中记录,那么可以选择SET NULL约束等级。...约束级联操作 级联删除:主表中记录被删除,如果子表中有依赖于该记录,则这些对应记录也将被自动删除。这可以通过在创建约束指定ON DELETE CASCADE选项来实现。...级联更新:主表中记录被更新,如果子表中有依赖于该记录,并且希望这些对应记录也相应更新,则可以使用ON UPDATE CASCADE选项。...开发场景 问题1:如果两个表之间有关系(一对一、一对多),比如:员工表和部门表(一对多),它们之间是否一定要建约束? 答:不是的 问题2:建和不建约束什么区别?

    7910

    关键字Internal,NoCheck,OnDelete,OnUpdate

    第四十一章 关键字 - Internal指定此外定义是否为内部定义(不显示在类文档中)。...如果想让用户看到一个类,但不看到它所有成员,这个关键字很有用。默认如果省略此关键字,此外定义将显示在类文档中。第四十二章 关键字 - NoCheck指定是否应该检查这个约束。...cascade级联—外部表中引用记录被删除,该表中引用记录也将被删除。 setdefault —引用记录在外部表中被删除引用记录中对外部表引用被设置为其默认值。...默认删除外部表中某一,将检查外部表上具有约束所有引用表,以查看是否任何引用了正在删除。如果找到任何这样引用,OnDelete操作将生效。默认默认值为noaction。...详解更新外部表中行键值,将检查外部表上具有约束所有引用表,以查看是否任何引用了正在更新。如果找到任何这样引用,OnUpdate操作将生效。默认默认值为noaction。

    55820

    各位,我把MySQL脱皮剔骨了,你吃不?

    如果需要执行大量SELECT查询,那么MyISAM是更好选择。 ? 二 级锁和约束 mysql支持三种锁定级别,级、页级、表级。...如果你是写锁,则其它进程则读也不允许 级:仅对指定记录进行加锁,这样其它进程还是可以对同一个表中其它记录进行操作 页级:表级锁速度快,冲突多,级冲突少,速度慢。...set age='24' where name like '%福%';不明确主键,在执行增删改查操作,会锁全表 2、MyISAM 支持表级锁定,没有提供对数据库事务支持,也不支持级锁和,因此...InnoDB表,但是对于使用额外InnoDB特性(例如)表不适用。...注意是,count()语句包含where条件,两种表操作是一样

    53540

    MySQL-多表操作

    遇到同一个SQL语句中含有多层子查询,它们执行顺序是从最里层子查询开始执行。 子查询分类 子查询划分方式多种,最常见是以功能和位置进行划分。...判断指定条件是否在子查询语句返回结果集中。 然后根据比较结果完成相关需求操作。 子查询 子查询结果是一条包含多个字段记录(一多列),称为子查询。...约束 添加约束 键指的是-一个表中引用另一个表中一列或多列,被引用列应该具有主键约束或唯一性约束, 从而保证数据一-致性 和完整性。 ➢被引用表称为主表。...➢引用表称为丛表。 创建数据表(CREATE TABLE),在相应位置添加约束。 修改数据结构(ALTER TABLE) ,在相应位置添加约束。...例如,从表字段不能插入主表中不存在数据。

    3.2K20

    SQL反模式学习笔记5 约束【不用钥匙入口】

    目标:简化数据库架构 一些开发人员不推荐使用引用完整性约束,可能不使用原因一下几点: 1、数据更新可能和约束冲突; 2、当前数据库设计如此灵活,以至于不支持引用完整性约束...1、假设无暇代码:要避免在没有约束情况下产生引用不完整状态,需要再任何改变生效前执行额外Select查询, 以此来确保这些改变不会导致引用错误。...比如在查询一条记录之前,需要检查对应引用记录是否存在。 2、检查错误:开发人员使用外部脚本来检查错误数据。...你需要同步执行两边更新,但是使用2个独立更新语句是不显示。 如何识别反模式:出现以下情况,可能是反模式 1、我要怎么写这个查询来检查一个值是否没有被同时存在2张表中?...2、约束的确需要多那么一点额外系统开销,相比于其他一些选择,确实更高效一点: (1)不需要在更新或删除记录前执行Select检查; (2)在同步修改时不需要再锁住整张表

    82230

    【重学MySQL】四、关系型数据库设计规则

    主键可以是单个字段,也可以是多个字段组合(复合主键)。主键字段值必须是唯一,且不允许为空。 约束:在需要表示表之间关联关系可以使用。...一对一关系(One-to-One Relationship) 定义:一个表每个记录()与另一个表某个记录()具有唯一对应关系,就存在一对一关系。...一对多关系(One-to-Many Relationship) 定义:一个表每个记录()与另一个表多个记录()具有关联关系,就存在一对多关系。...在这种关系中,一个表主键对应另一个表。 示例: “顾客”表与“订单”表:一个顾客可以多个订单,每个订单只属于一个顾客。...这样,员工表就通过“上级员工ID”字段实现了自我引用。 实现关联关系要点 主键与:在建立关联关系,通常将一个表主键作为另一个表

    5610

    MySQL见闻录 - 入门之旅(三)

    MySQL在执行每一条SQL语句都会自动对该语句所设计资源进行锁定以避免个语句之间相互干扰,这仍不足以保证每一个数据库操作总是能得到预期结果。...5、使用 利用(foreign key)关系可以在某个数据表里声明与另一个数据表里某个索引相关联索引。...还可以把你想施加在数据表上约束条件放到外关系里,让系统根据这个关系里规则来维护数据引用完整性。...这可以确保只有那些在studnt数据表里存在student_ id值数据才能被插人到score数据表里。换句话说,这个可以确保不会出现为一名并不存在学生输入了成绩错误。...不仅在数据插人操作中很有用,在删除和更新操作中也很有用。

    39510

    SQL命令 UPDATE(三)

    SQL命令 UPDATE(三) 参照完整性 如果没有指定%NOCHECK, IRIS将使用系统范围配置设置来确定是否执行引用完整性检查; 默认值是执行引用完整性检查。...可以在系统范围内设置此默认值,如引用完整性检查中所述。 要确定当前系统范围设置,调用$SYSTEM.SQL.CurrentSettings()。...此设置不适用于用NOCHECK关键字定义。 在UPDATE操作期间,对于每个具有更新字段值引用,都会在被引用表中旧(更新前)引用和新(更新后)引用上获得共享锁。...几种可能策略可以避免这种情况:(1)增加锁升级阈值,以便锁升级不太可能在事务中发生。 (2)大幅降低锁升级阈值,以便锁升级几乎立即发生,从而减少其他进程锁定同一表中记录机会。...您使用链接表向导链接一个表,您可以选择将字段定义为只读。

    1.6K20

    mysql 唯一冲突与解决冲突死锁风险

    唯一冲突与解决方案 在业务中,我们为了保证符合某些条件唯一性,在 mysql 表创建通过 UNIQUE KEY 来限制唯一是一个很好习惯。...`idx_value` (`idxvalue`), UNIQUE KEY `uk_value` (`ukvalue`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 尝试插入对应主键或唯一已存在...执行转换后操作 这里提到转换模式两种: 如果发生 duplicate key 冲突索引是最后一个唯一索引,且没有引用,且不存在 delete trigger,使用 UPDATE ROW 方式来解决冲突...此时,由于临存在,数据插入前尝试获取插入意向锁操作被阻塞,直到获取锁超过超时时间退出。 3.3.2. 插入意向锁与死锁 既然插入意向锁存在有可能造成锁等待,那么是否可能造成死锁呢?... replace into 执行时,从上文可以了解到,大部分场景下,mysql 实际执行是 delete + insert 两步操作, binlog 中实际上只会保存一条 update 语句。

    4.2K41
    领券