2011-10-14 49 views
26

我使用hibernate并希望使用命名查询。但我不知道这是否是好的解决方案?请为我提供指定查询的优势。在休眠命名查询的优点?

当命名查询编译? 我们是否可以直接更改在应用程序服务器中部署的hbm文件中的命名查询?

请帮帮我。

谢谢!

回答

26

命名查询是在SessionFactory实例化时编译的(所以,实际上,当您的应用程序启动时)。

明显优势,因此,这是你的所有命名查询进行验证在那个时候,而不是在执行时失败。另一个优点是它们很容易(-ier)维护 - 当然对于复杂的查询。

缺点是命名查询是在运行时不能自定义 - 您可以定义/供应参数,当然,但除此之外,你定义什么是你会得到什么;你甚至不能改变排序。另一个缺点是,将无法​​在正在运行的应用程序服务器内更改命名查询,而无需重新加载SessionFactory

16

优势

  • 编译和应用程序启动时间验证
  • 更容易维护不是嵌入在代码中
  • HQL和原生SQL查询字符串文字可使用,无需代码替换改变(不需要重新编译你的代码)

缺点

  • 静态
  • 与本地SQL查询有时繁琐

所以结果集映射,我想你一定要更喜欢字符串文字命名查询在你的代码。当你需要在运行时创建一些动态查询时,你应该看看Hibernate Criteria API。 Hibernate Criteria并不总是简单直观的使用方法,但是您应该使用它,而不是在运行时生成查询字符串。

HTH