柚子Nan--回归原点

Everything can be as easy as you like or as complex as you need.
posts - 231, comments - 970, trackbacks - 17, articles - 29
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

NHibernate使用手迹(3rd)

Posted on 2005-06-02 15:28 柚子Nan 阅读(2324) 评论(6)  编辑 收藏 所属分类: [技术.Net]
[关注HQL]
在上一篇文章中,经过各位的帮助,终于搞定了主子对象的级联插入保存操作(对应的就是主子表的插入)。从现在开始继续探索
NHibernate提供的查询体系!
NHibernate提供了一个特殊的查询语言HQL(Hibernate Query Language),如果只是站在查询的角度,NHibernate就是把HQL翻译成SQL的翻译器而已

我来写个
HQL语句试试看!
需求说明如下:Data.UniversityClass是映射的类名
             universityclass     对应的数据库表名
StartDateData.UniversityClass的一个属性,当然他也对应数据库表的一个字段!
现在我只想取到StartDate一个属性的值,而不是默认的Select * .
看了说明以后,这个太简单了,你可能马上就写出来了
select StartDate from Data.UniversityClass
或者,你认为类名无法精确定位,提出如下答案:
select Data.UniversityClass.StartDate from Data.UniversityClass
其实这两个都是错的,这个我测试了10分钟,才搞明白!
报错:undefined alias or unknown mapping: StartDate [select StartDate from Data.UniversityClass]
后来非常仔细的看了一下其他例子,正确的写法如下:
select myClass.StartDate from Data.UniversityClass as myClass
结果就正确的显示出来了,为什么? 

[简单思考]
如果站在面向对象的角度考虑一下,就发现这个也蕴含了一定的
OO思想,
我们再仔细看看Data.UniversityClass是什么,没错,类名!
那么类名的属性可以直接用吗?不能,除非类是Static的,
那么as myClass是否很像建立了一个Class的对象,那么剩下的就对了啊!

请注意措辞了,表、字段 类、属性、对象!

Feedback

#1楼    回复  引用    

2005-06-02 16:58 by Saunter [未注册用户]
首先谢谢你的文章,我刚开始接触NHibernate,那么如何返回多表查询的集合呢,如select Department.Id,Employee.Id from Org.Employee as Employee inner join Org.Department as Department

#2楼    回复  引用  查看    

2005-06-03 19:14 by 听棠.NET      
哎,我看了一下,感觉没兴趣,因为它让我从稍熟悉的SQL中出来后,又进了HQL的迷阵。
HQL的提出,我个人认为是一种错误,如果从理论上讲一种飞跃的话,那么在实用性上未必是成功的。
因为让一个程序员要熟悉这个所谓的HQL,简直是要命的,而且HQL也不是万能的能够解决所有的SQL问题。
我也听到好多人在报怨这所谓的HQL。。
有时候我在想,为什么这东西这么不好,但还是有这么多人,在追捧着,不出来表明自己的态度。有可能是盲目崇拜,有可能是因为大家都不会,这能突出自己的水平吧。
一个东西的存在,至少先要说明存在的意义,有没有实用价值,真不知道有多少朋友在使用这HQL应用到项目开发?估计也都是学习学习而已,也都会半途而废。

#3楼    回复  引用  查看    

2005-06-03 23:12 by 柚子Nan       
:), 谢谢你的建议

#4楼    回复  引用    

2005-06-11 11:24 by FordFocus [未注册用户]
Hibernate3中的HQL已经提供了delete/update功能,可见也日趋完善和全面,同时也越来越接近的传统的SQL,与SQL不同的是,SQL面向的是二维的结构化的数据,而HQL则面向数据对象。在对象型数据库尚不成熟的今天,通过面向对象的查询语言对关系数据进行访问,既满足了上层结构中面向对象设计的要求,也充分利用了现有技术平台,这个估计正是Hibernate的优势所在!

#5楼    回复  引用    

2007-09-22 12:02 by 又一初学者 [未注册用户]
好贴
非常感谢

#6楼    回复  引用    

2007-09-29 16:13 by hi [未注册用户]
同意听棠的说法啊, 事实上ORM 讲求还是极致的oo ,只要做到了oo ,无所谓用不用sql ,用ado.net ,用nh,都可以实现oo,也都可以实现orm.

这个hql 实在还很不成熟,即使在今天也是如此

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2005-06-02 15:33 编辑过
 
另存  打印