news 2026/7/6 3:48:31

NHibernate Issues之1904/1905:相同属性的Domain与Join查询/子查询

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
NHibernate Issues之1904/1905:相同属性的Domain与Join查询/子查询

概览

这个系列是以博客形式整理关于NHibernate的Issues。记录一些零碎的小例子,通过零零碎碎的整理,可以巩固自己的知识和扩展我们的知识面。这些小例子也可以适当的在项目中呈现。

在接下来的NHibernate2.1.1GA版本中,修正了两个BUG。分别是[NH-1904]和[NH-1905],之所以提出来,我原来也用过这样的情况,但是始终无解,看了这两个链接,原来是BUG,现在我们可以用了~~

两个实例

实例一

如果Domain中没有什么业务逻辑,一般都是使用“贫血模型”,但是有的为了需要增加一些业务逻辑,就慢慢形成了“充血模型”,这篇暂且不谈它们之间的优缺点。我有时使用“充血模型”,需要在Domain中定义一些“保护的或者私有的”属性满足一些逻辑,有时也需要两个相同的属性不同的权限互相赋值什么的,但是这一点NHibernate都不支持(因为是通过映射来找属性的,根据属性命名算法有着不同的访问策略),无奈之下只有使用别的别名代替。

1.Domain

模拟一Domain,有两个(几乎)相同的属性,一个是公共的,一个是保护的。我们操作公共的属性,必要的时候赋值给那个保护的。

public class Invoice { public virtual int Id { get; private set; } public virtual DateTime Issued { get; set; } protected virtual DateTime issued { get; set; } }

2.Mapping

映射这个Domain,这里就映射公共的那个属性用于持久化吧

<class name="Invoice"> <id name="Id"> <generator class="hilo" /> </id> <property name="Issued"/> </class>

3.Test

验证下Save和查询方法。OK

using (var session = OpenSession()) using (var transaction = session.BeginTransaction()) { var invoice = new Invoice {Issued = DateTime.Now}; session.Save(invoice); transaction.Commit(); } using (var session = OpenSession()) { var invoices = session.CreateCriteria<Invoice>().List<Invoice>(); }

实例二

在我们的项目中,错综复杂的关系经常需要Join查询和子查询,但是Join查询我们都在在映射文件中配置关系,如果没有配置关系NHibernate的Join查询就无能为力了,只有Select两张表,然后让两张表的Id相等。这好像是linq to sql的一贯做法。NHibernate在这点上强了很多,只要在映射文件中配置一下,小小查询什么都搞定了。

1.Domain

三个Domain:Master,Details,Element,Master与Elements多对多关系,Detail与Master多对一关系。

public class Master { public virtual int Id { get; set; } public virtual ISet<Element> Elements { get; set; } } public class Detail { public virtual int Id { get; set; } public virtual Master Master { get; set; } } public class Element { public virtual int Id { get; set; } public virtual string Description { get; set; } }

2.Mapping

映射这个Domain。

<class name="Master"> <id name="Id"> <generator class="assigned" /> </id> <set name="Elements" table="MasterElement"> <key column="MasterId" /> <many-to-many column="ElementId" class="Element"/> </set> </class> <class name="Detail"> <id name="Id"> <generator class="assigned" /> </id> <many-to-one name="Master" class="Master" column="MasterId" /> </class> <class name="Element"> <id name="Id"> <generator class="assigned" /> </id> <property name="Description"/> </class>

3.Test

我的目的是要查询Detail信息,Join关联他的Master,还有个子查询判断Master的Elements描述信息e1的数量大于0。下面这句比较经典了。

var det= s.CreateQuery(@"from Detail d left join d.Master m where (select count(e) from d.Master.Elements e where e.Description='e1')>0") .List<Detail>();
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 3:47:06

智能办公本X2:端侧AI驱动的手写语音协同工作流

1. 项目概述&#xff1a;这台办公本不是“电子纸”&#xff0c;而是你会议桌旁的沉默合伙人“如何评价科大讯飞推出的智能办公本X2&#xff1f;”——这个问题最近在律师、高校教师、咨询顾问和自由撰稿人圈子里被反复提起。我拿到真机实测三个月&#xff0c;从律所开庭前的案情…

作者头像 李华
网站建设 2026/7/6 3:47:03

大语言模型解码策略与低资源部署技术详解

自回归解码的核心流程 解码过程本质上是基于概率的序列生成。模型根据当前上下文逐个预测下一个词元&#xff0c;直到生成结束符或达到长度限制。算法2清晰展示了这一流程&#xff1a;每次迭代中模型输出概率分布P&#xff0c;通过解码策略选择下一个词元u&#xff0c;并更新上…

作者头像 李华
网站建设 2026/7/6 3:44:12

NHibernate实例分享:Northwind Mapping

本节内容 说明代码参考资料 说明 NHibernate的强大之处在于其映射&#xff0c;我们在设计Domain中&#xff0c;经常为各种各样的映射感到头痛&#xff0c;为此我把微软SQL Server2000自带的Northwind数据库使用NHibernate映射了一下&#xff0c;需要的请下载其代码&#xff…

作者头像 李华
网站建设 2026/7/6 3:40:19

2026年全铜卫浴五金洁具厂商口碑情况汇总

一、行业背景与现状据了解&#xff0c;在2026年&#xff0c;全铜卫浴五金洁具行业呈现出较为稳定的发展态势。据公开资料显示&#xff0c;市场规模持续扩大&#xff0c;随着人们生活品质的提高&#xff0c;对卫浴产品的需求不断增加。在政策方面&#xff0c;环保要求日益严格&a…

作者头像 李华
网站建设 2026/7/6 3:38:30

Vben精讲:06-Vben环境变量配置

文章目录学习文档环境变量配置文件&#xff1a;Vben\\vue-vben-admin\\.gitignore文件 apps\web-antd\src\main.ts环境变量优先级学习文档 https://doc.vben.pro/ https://doc.vben.pro/guide/essentials/settings.html 环境变量配置 .env # 在所有的环境中…

作者头像 李华
网站建设 2026/7/6 3:37:38

MoeKoe Music终极指南:如何用开源免费客户端享受VIP音乐体验

MoeKoe Music终极指南&#xff1a;如何用开源免费客户端享受VIP音乐体验 【免费下载链接】MoeKoeMusic 一款开源简洁高颜值的酷狗第三方客户端 An open-source, concise, and aesthetically pleasing third-party client for KuGou that supports Windows / macOS / Linux / We…

作者头像 李华