社区首页 >问答首页 >nHibernate查询异常:不存在具有给定标识符的行

nHibernate查询异常:不存在具有给定标识符的行
EN

Stack Overflow用户
提问于 2011-10-06 04:48:54
回答 1查看 2.3K关注 0票数 2

在稍微修改数据模型之后,某些查询开始给出这个异常。然而,即使在阅读了各种论坛帖子和博客之后,我也不明白为什么在我的情况下会发生这种情况。所以我希望这里有人能帮忙。首先,一个示例查询:

代码语言:javascript
代码运行次数:0
复制
var criteria = Session.CreateCriteria(typeof(SomeEntity));
        criteria.Add(Expression.IdEq(id));
        criteria.SetFetchMode("_PrivateProperty", FetchMode.Eager);
        criteria.CreateAlias("PublicProperty", "alias");
        criteria.Add(Expression.Eq("alias.Id", aliasId));

如果我通过删除公共属性的(1) SetFetchMode或(2) CreateAlias来修改查询,那么一切都正常。

私有属性通常是延迟加载的,但在本例中,我希望与它的父实体一起加载它,以对抗select N+1。

那么,为什么它不能像上面显示的那样工作,并且当我删除查询的某些部分时,它是否工作呢?

更新

生成的SQL:

代码语言:javascript
代码运行次数:0
复制
SELECT * FROM SomeEntity this_ 
inner join PublicProperty alias4_ on this_.SomeEntityId=alias4_.SomeEntityId 
inner join ReferencedProperty rp2_ on alias4_.RPId=rp2_.RPId 
left outer join PrivateProperty v1_ on this_.SomeEntityId=v1_.SomeEntityId 
WHERE this_.SomeEntityId= @p0 and rp2_.RPId= @p1

在中运行时,它将按预期工作。我得到了两个结果。在修改数据模型和查询之间,数据库中的数据没有改变。

UPDATE2

修正模型。原始制图:

代码语言:javascript
代码运行次数:0
复制
References(d => d.PublicProperty, "PublicPropertyId").Cascade.SaveUpdate();

新制图:

代码语言:javascript
代码运行次数:0
复制
HasManyToMany(d => d.PublicPropertys)
            .Access.CamelCaseField(Prefix.Underscore)
            .Table("SomeEntityPublicProperty")
            .ParentKeyColumn("SomeEntityId")
            .ChildKeyColumn("PublicPropertyId")
            .Cascade.SaveUpdate()
            .Inverse();

UPDATE3

代码语言:javascript
代码运行次数:0
复制
HasMany<PrivatePropertyEntity>(Reveal.Member<SomeEntity>("_PrivateProperty"))
            .Table("SomeEntity_PrivateProperty")
            .KeyColumn("SomeEntityId")
            .Cascade.AllDeleteOrphan()
            .LazyLoad().Inverse();
EN

回答 1

Stack Overflow用户

发布于 2011-10-25 20:43:42

您的问题可能源于这样一个事实:如果您使用create别名(没有指定外部连接类型),那么不管您的配置是什么,实体都不会被急切地加载。

造成这种情况的原因与您的错误有关:假设您没有在关联的RHS上指定任何标准,并且您的数据中有空引用,那么使用内部连接将错误地过滤掉LHS上的记录。

因此,对于NHibernate来说,查询使用内部联接返回两个结果并不重要--无论如何,它会继续加载关联。在某个地方,您可以在多到多联接表中引用一个不存在的引用属性,当它试图延迟加载它以检查RHS是否与您的标准匹配时,它就失败了。

将别名更改为执行左外部联接可以防止错误(它实际上将急切地加载相关实体,而不会重新检查引用),但在某个地方仍然存在引用完整性问题:

代码语言:javascript
代码运行次数:0
复制
criteria.CreateAlias("PublicProperty", "alias", JoinType.LeftOuterJoin);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7674436

复制
相关文章
CA1715:标识符应具有正确的前缀
接口名称应以大写的“I”开头,后跟另一个大写字母。 此规则报告与接口名称(如“MyInterface”和“IsolatedInterface”)相关的冲突。
呆呆
2022/02/19
5150
开发:异常收集之 sql查询 表或视图不存在
其实针对大部分的 sql查询,不论是查oracle、sqlServer、MySQl 出现 查询表或视图不存在
执笔记忆的空白
2020/12/25
1.3K0
CA1710:标识符应具有正确的后缀
按照约定,扩展某些基类型或实现某些接口的类型的名称,或者由这些类型派生的类型的名称应具有与相应基类型或接口关联的后缀。
呆呆
2022/02/18
1K0
让OData和NHibernate结合进行动态查询
OData是一个非常灵活的RESTful API,如果要做出强大的查询API,那么OData就强烈推荐了。http://www.odata.org/
深蓝studyzy
2022/06/16
4100
SQL 找出分组中具有极值的行
你可能也遇到过这种需求:找出每个部门入职最早的员工的信息;获取每个科目最高分的学生信息;获取用户最近一次的完整登录信息。
白日梦想家
2020/07/20
1.8K0
SQL 找出分组中具有极值的行
php数组中模糊查询给定的值
第一种:查询给定的值索引不变 /** * 在数组中模糊搜索给定的值 * @param $data * @param $keyword * @return array */ function searchArr($data,$keyword){ $arr = array(); foreach($data as $key=>$values ){ if (strstr( $values , $keyword ) !== false ){ $arr
素描
2019/09/19
6.4K0
NHibernate 缓存
一级缓存就是 ISession 缓存, 在 ISession 的生命周期内可用, 多个 ISession 之间不能共享缓存的对象, 通过 ISessionFactory 创建的 ISession 默认支持一级缓存, 不需要特殊的配置。 在 NHibernate 的参考文档中, 对 ISession 的描述如下:
beginor
2020/08/06
6090
Nhibernate_nhibernate与ef区别
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说Nhibernate_nhibernate与ef区别,希望能够帮助大家进步!!!
Java架构师必看
2022/07/19
6030
msyql查询数据库中不存在的记录
有时候,需要往数据库里插入数据,这些数据,有些已经在MySQL中。但这种导入的工作,只是临时性的,又想专门写一个脚本去判断是否存在数据库,不存在就插入。这里提供一个骚操作,可以直接用MySQL查看哪些不在数据库的,然后再插入。
用户10002156
2023/08/07
2790
msyql查询数据库中不存在的记录
[原创]Fluent NHibernate之旅(三)-- 继承
经过了“开篇”和“简单映射”两篇文章,相信大家对Fluent NHibernate 有了一定的了解了,FluentNHibernate实际就是对 NHibernate 映射的一定扩展,我们能完全利用强类型、泛型、Lambde表达式等等Vs、Framework等特性简单完成映射工作,同时也能让我们学习NHibernate的映射方式,一举夺得,这么好玩的东东,有理由不继续完成这个系列吗?废话不说,回到正题。 从这一篇开始,我们将使用Fluent NHibernate RC 1.0 版来进行演示,先前的代码,我
脑洞的蜂蜜
2018/02/02
7010
[原创]Fluent NHibernate之旅(三)-- 继承
NHibernate分页
转载:http://www.cnblogs.com/tenghoo/archive/2011/02/14/1954393.html
跟着阿笨一起玩NET
2018/09/19
4710
NHibernate 缓存
一级缓存就是 ISession 缓存, 在 ISession 的生命周期内可用, 多个 ISession 之间不能共享缓存的对象, 通过 ISessionFactory 创建的 ISession 默认支持一级缓存, 不需要特殊的配置。 在 NHibernate 的参考文档中, 对 ISession 的描述如下:
全栈程序员站长
2022/09/19
4440
NHibernate教程
在今日的企业环境中,把面向对象的软件和关系数据库一起使用可能是相当麻烦、浪费时间的。NHibernate是一个面向.Net环境的对象/关系数据库映射工具。对象/关系数据库映射(object/relational mapping (ORM))这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。 NHibernate除了能将一张表映射为一个对象,还可以将表间关系变为对象的属性。例如学生和课程间的多对多关系就可以转化为学生类中的一个课程集合的属性。由此可见,NHibernate不仅仅管理.Net类到数据库表的映射,还提供数据查询和获取数据的方法。因此采用NHibernate,可以大幅度减少开发时人工使用SQL处理数据的时间。
全栈程序员站长
2022/09/14
3880
查询结果行转列?
场景:数据库的结构中有三张表,学生表,课程表,成绩表。每个课程有着不同的学分,所以需要查学生的成绩中对应的课程。然后SUM求和。
乐心湖
2020/07/31
1.5K0
查询结果行转列?
mysql datetime查询异常
异常:Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp (2011-05-25 11:38:40)
WindWant
2020/09/11
1.3K0
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
7100
NHibernate总结
现在的项目中数据访问使用的是NHibernate的一个ORM框架,小弟也是在后期加入项目组,之前对NHibernate就一直没有接触过,所以一直在学习NHibernate,都是一些很基础的一些东西,写出来总结一下,作为备忘。
写代码的猿
2019/04/11
9400
NHibernate总结
Python批量复制Excel中给定数据所在的行
  本文介绍基于Python语言,读取Excel表格文件数据,并基于其中某一列数据的值,将这一数据处于指定范围的那一行加以复制,并将所得结果保存为新的Excel表格文件的方法。
疯狂学习GIS
2023/10/06
3240
Python批量复制Excel中给定数据所在的行
InnoDB行锁,如何锁住一条不存在的记录?
InnoDB行锁,如何锁住一条不存在的记录?
Java架构师必看
2021/09/29
6800

相似问题

nHibernate,则不存在具有给定标识符的行

30

NHibernate + HQL子查询-不存在带有给定标识符的行

32

NHibernate -“不存在具有给定标识符的行”,但它确实存在

11

Nhibernate -当找不到相关记录时,不存在具有给定标识符的行

11

Nhibernate与新对象图合并不存在具有给定标识符的行

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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