- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
NHibernate多表查询解决方法
NHibernate多表查询概述:在项目中应用NHibernate架构时,会经常遇到多表查询.因为项目上要用到,通过多天的查询总结了以下两种解决方案.解决方案:(1)使用HQL语句,然后把查询出的结果存入临时表中,然后再进行绑定.(2)使用select new OaxtJoinGlxt这种语法,根据查询的内容自己构建相应的实体类.第一种方案实现具体过程:我的需求如下:我需要查询JkptOaxtOrganization实体类中的Orgid,及JkptGlxtOrganization实体类中的Orgname我需要查询JkptOaxtOrganization实体类中的Orgid,及JkptGlxtOrganization实体类中的Orgname第一步:构建HQL语句如下string sql = select oo.Orgid ,go.Orgname from JkptOaxtOrganization as oo,JkptGlxtOrganization as go where oo.Orgid=+orgid+ and oo.Suborgid=go.Orgid; IQuery Query = session.CreateQuery(sql);IList list = Query.List();说明:如果在相应的映射文件中设置好实体的对应关系,就没有必要加Where条件了.第二步:建立临时表,把查询出的结果存入临时表DataTable dt = new DataTable();DataColumn dc = new DataColumn(); dc = new DataColumn(); //增加第1列dc.DataType = System.Type.GetType(System.Int32);dc.ColumnName = Orgid;dt.Columns.Add(dc);dc = new DataColumn(); //增加第2列dc.DataType = System.Type.GetType(System.String);dc.ColumnName = Orgname;dt.Columns.Add(dc);dc.Dispose();IEnumerator enu = list.GetEnumerator();while (enu.MoveNext()){ //给查询出来的每行赋值object[] obj = (object[])enu.Current;DataRow newrow = dt.NewRow();newrow[Orgid] = obj[0];newrow[Orgname] = obj[1];dt.Rows.Add(newrow);}ds.Tables.Add(dt);我个人觉得,这种方式存在很大缺陷,如临时表用完需要删除,如果要查询50个字段,那么写临时表就得累死,所以我还是推荐大家用第二种方案.第二种方案的具体实现过程第一步:构建HQL查询语句:string sql = select new OaxtJoinGlxt(oo.Orgid,gg.Orgname) from JkptOaxtOrganization as oo , JkptGlxtOrganization as gg where oo.Orgid= + orgid + and oo.Suborgid=gg.Orgid; IQuery query = session.CreateQuery(sql);IList list = query.List();ds = Helpers.ConvertToDataSet(list);return ds;第二步:根据查询的内容构造的实体类OaxtJoinGlxt.cs如下 public class OaxtJoinGlxt{public OaxtJoinGlxt(decimal pOrgid, string pOrgname){this._Orgid = pOrgid;this._Orgname = pOrgname;}private decimal? _Orgid;public decimal? Orgid{get { return _Orgid; }set { _Orgid =value;}}private string _Orgname;public string Orgname{get { return _Orgname; }set { _Orgname = value; }}}第三步:在相应的映射文件中导入OaxtJoinGlxt类为了要让NHibernate知道到什么地方去找这个OaxtJoinGlxt类,我们需要将OaxtJoinGlxt类也导入到hbm.xml 文件定义中,在JkptOaxtWeat
您可能关注的文档
- 《唱歌三峡的孩子爱三峡课件》小学音乐人教版五年级上册_4.ppt
- 2017最新高二数学下期末试卷文带答案和解释.docx
- 《唱歌三峡的孩子爱三峡课件》小学音乐人教版五年级上册_2.ppt
- 《唱歌保卫黄河课件》小学音乐人教2001课标版五年级下册课件.ppt
- 2017精编高二数学下期末考试题文有答案.docx
- 《唱歌守株待兔的老农夫课件》小学音乐人教2011课标版四年级上册课件.ppt
- 《唱歌美丽的家乡课件》小学音乐人教2001课标版五年级下册课件.ppt
- 2017精选中考历史试卷含答案.docx
- 2017精选高二数学下期末试题 理有答案和解释.docx
- 《唱歌长江我的家课件》小学音乐人教2001课标版五年级下册课件_1.ppt
- 新高考生物二轮复习讲练测第6讲 遗传的分子基础(检测) (原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第3讲 酶和ATP(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第9讲 神经调节与体液调节(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第8讲 生物的变异、育种与进化(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(检测)(原卷版).docx
文档评论(0)