NHibernate,使用HQL而不是查询

时间:2013-12-26 09:22:10

标签: nhibernate

如果我使用Nhibernate HQL而不是查询和连接是不是很糟糕?

我试图从数据库中查询大量数据,但由于需求的复杂性,很难构建查询。一个是我应单独项目两个或多个属于单个列的字段(我不知道这样做,我只是nhibernate中的菜鸟)

我现在想通过HQL来做。好吗? :(

2 个答案:

答案 0 :(得分:1)

我想根据我的经验附加我的答案:首选CriteriaQueryOver API优先于 HQL

这篇文章是论证的起点:http://ayende.com/blog/4042/nhibernate-queries-should-i-use-hql-or-criteria。一个小提取物,引用:

  

...... HQL是NHibernate公开其大部分功能的方式......它与SQL的相似性意味着它在写入和阅读时非常直观

     

然而,它最大的弱点是,当您想要使用某些动态条件执行查询时。例如,如果您想要一个包含多个可选搜索字段的搜索页面。 对于这种情况,我们有Criteria API,它允许我们动态,轻松,轻松地撰写查询。 ......

我想签下第二段!迟早,您将把您的应用程序(服务器部分/数据层)移动到某个位置,在那里您将执行一些常规操作。常见的分页,排序,过滤......

标准在 HQL

上重新启动QueryOver

要创建有效的 HQL ,需要付出更多努力,因为您将自己完成所有工作。

使用Criteria / QueryOver API,您只需调用标准方法JoinWhereOrderBy .... 不要担心如何将所有碎片放在一起(例如,WHERE x和y ...注入“AND”运算符)

所以,要知道HQL,但学习Criteria resp QueryOver API ...并使用THEM

编辑:Criteria世界的预测很有趣。

更重要的是,它们可以封装到对象,自定义投影或自定义投影束中。因此,我们可以获得可重用的代码,这可以隐藏实现的一些复杂性。但因为它们是对象,我们可以测试它们,然后依靠它们

我们还可以实现定制的Transformer,它可以带来更多的好处。见example here

预测的一些例子:

https://stackoverflow.com/a/18885527/1679310

答案 1 :(得分:0)

HQL的缺点是它不是类型安全的。就像你在C#代码中编写TSQL一样。它只是生产臭臭的代码。 如果您的域模型发生了变化,由于代码不同,您很有可能遇到奇怪的异常......

但如果这不是你担心的事情,那取决于你我会说;)