NHibernate 为习惯SQL的开发者提供了接口,将查询的结果转变为持久化对象。虽然该方法不是很提倡。

GetCurrentSession().CreateSQLQuery(sql)

 参数sql就是实际要执行的sql语句。

如果需要将结果转化为持久换对象,那需要提供对象类型。

GetCurrentSession().CreateSQLQuery.AddEntity()

但需要注意的是,该类型必须是NHibernate可持久化的对象,也就是该类型必须写在hbm.xml文件中。

同时,sql中必须提供类型中所必须的全部属性,实例化全部属性。假如,实体类中有3个属性,但sql只提供了小于3的字段(属性),会报错。

class Item{
public int Id{get;set;}
public string Name{get;set;}
public DateTime Birthday{get;set;}
}

  如果使用下面的sql会报错。sql中提供了2个字段,但是实体类中有3个属性。

GetCurrentSession().CreateSQLQuery("select Id,Name from Item").AddEntity(new Item().GetType())

很多情况下,我们需要初始化部分属性。如果将结果实例化,那需要重新设计一个可持久化的类。这样可能会增加很多小类,非常不灵活。

幸运的是NHibernate为我们提供了另外一个方法List,将结果转化为object[].

GetCurrentSession().CreateSQLQuery("select Id,Name from Item").List<object[]>() as List<object[]>;

进一步将List<object[]>转化为强类型。

 List<object[]>.ConvertAll<Item>(new Converter<object[], Item>(
  delegate(object[] a) {
    return new Item(){Id =Convert.ToInt32(a[]),Name=a[].ToString()}
       }
));

NHibernate实例化类部分属性的更多相关文章

  1. 实例化类对象及类的属性set方法使用不当

    类的属性中set方法操作数据库,新建类对象并给其赋值时总会触发该set方法,而导致不期望的错乱: 库位类Storage,其中传感器状态SensorStatus和逻辑状态LogicStatus有一定的关 ...

  2. iOS开发之遍历Model类的属性并完善使用Runtime给Model类赋值

    在上篇博客<iOS开发之使用Runtime给Model类赋值>中介绍了如何使用运行时在实体类的基类中添加给实体类的属性赋值的方法,这个方法的前提是字典的Key必须和实体类的Property ...

  3. 漫谈 Java 实例化类

    Java 中实例化类的动作,你是否还是一成不变 new 对应对象呢? 经手的项目多了,代码编写量自然会增加,渐渐的会对设计模式产生感觉. 怎样使书写出来的类实例化动作,高内聚,低耦合,又兼具一定的扩展 ...

  4. javascript继承(一)—类的属性研究

    本篇文章主要针对javascript的属性进行分析,由于javascript是一种基于对象的语言,本身没有类的概念,所以对于javascript的类的定义有很多名字,例于原型对象,构造函数等,它们都是 ...

  5. <九>面向对象分析之UML核心元素之设计类,类,属性,方法,可见性

    设计类

  6. java类(Class)的概念;对象的概念,声明类的属性 和方法,局部变量和成员变量,面向对象编程思维,抽象的概念

    类(Class)的概念 类是对一组具有相同特征和行为的对象的抽象描述. 理解: [1] 类包含了两个要素:特性和行为 => 同一类事物具有相同的特征和行为. [2] 类是一个群体性概念.例如:网 ...

  7. guxh的python笔记六:类的属性

    1,私有属性 class Foo: def __init__(self, x): self.x = x 类的属性在实例化之后是可以更改的: f = Foo(1) print(f.x) # 1 f.x ...

  8. 创建java类并实例化类对象

    创建java类并实例化类对象例一1.面向对象的编程关注于类的设计2.设计类实际上就是设计类的成员3.基本的类的成员,属性(成员变量)&方法 面向对象思想的落地法则一:1.设计类,并设计类的成员 ...

  9. Java类、属性、方法、构造方法、块、内部类的基本概念

    类 概念:类相当于一个模板,里面定义了多个对象共同的属性和方法 基本结构:属性.方法.构造方法.块.内部类 声明形式:[访问权限修饰符][修饰符] class 类名 { 类体 } 属性 概念:存放对象 ...

随机推荐

  1. D&F学数据结构系列——二叉排序树

    二叉排序树(Binary Sort Tree) 定义:对于树中的每个结点X,它的左子树中所有关键字值小于X的关键字值,而它的右子树中所有关键字值大于X的关键字值. 二叉查找树声明: #ifndef _ ...

  2. java基础知识回顾之javaIO类---FileInputStream和FileOutputStream字节流复制图片

    package com.lp.ecjtu; import java.io.FileInputStream; import java.io.FileNotFoundException; import j ...

  3. 用Stopwatch类获得程序运行时间

    我们可以用Stopwatch类获得程序的运行时间,在优化代码时,可以用此方法来查看优化前后程序所耗费的时间 //Stopwatch类別在System.Diagnostics命名空间里 Stopwatc ...

  4. Linux信号处理1

    函数原型 NAME signal - ANSI C signal handling SYNOPSIS #include <signal.h> typedef void (*sighandl ...

  5. 解决xshell连接linux总是异常断开的问题?

    找到etc下面的profile文件,可以看到有下面一行: TMOUT=;export TMOUT 注释掉即可解决. #TMOUT=;export TMOUT

  6. updmap-sys failed. Output has been stored in

    Ubuntu 12.04升级到Ubuntu 12.04lts的时候,出现错误: Do you want to continue? [Y/n] ySetting up tex-common (4.04) ...

  7. VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)

    VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)-软件开发-鸡啄米 http://www.jizhuomi.com/software/143.html   鸡啄米在上一讲中 ...

  8. ubuntu sh脚本双击运行

    自从13.04以后,双击sh脚本文件就已经默认是geidt打开了,要想运行,从nautilus-->文件-->首选项-->行为-->可执行文件 有三个选项,默认是第二个,如果想 ...

  9. DWR3.0 dwr 返回值(数组,集合,Map)

    首先导入项目所需要的包,如下:dwr.jar,commons-logging-1.0.4.jar,版本可以调整 1.web.xml<?xml version="1.0" en ...

  10. OpenGL环境搭建Windows+Mac+Linux

    OpenGL环境搭建Windows+Mac+Linux Mac平台下 下载列表:GLFWcmake 下载的GLFW解压缩 然后安装cmake, 安装好cmake之后打开 1.browse source ...