2014-02-10 42 views
1

我正在管理使用PostgreSQL数据库的Spring Web应用程序的开发。Hibernate查询v数据库函数

我正在做db工作并提供脚本(即authenticate_user)供正在使用Hibernate的Java开发人员使用。我对Java和Hibernate的接触有限。

我了解hibernate的基本概念,但肯定不是它提供的全套功能。我想要了解和控制数据层,但想要最好的解决方案,那么最好的解决方案就是一切。

我最初的想法是存储所有作为函数或过程编写的查询/插入/更新脚本,并允许Java开发人员简单地调用它们并使用结果/结果集,而不是构建hibernate表引用和查询Java类/ XML文件。我们的Java开发人员说他宁愿使用hibernate来处理所有事情,并且正在转换我的函数/过程。

到目前为止,我们的sql语句非常简单。当他们达到复杂程度(或更高)时会发生什么,如下面的帖子所示?

How to construct advanced Hibernate Query with OR and summarize functions

如果一个函数/程序被写入数据库,并正在被休眠调用,可以在Java开发人员只称他们(即调用myFunction的(PARAM)或致电MYPROC(PARAM)),并使用结果集的方式与他在hibernate中构建查询的方式完全相同?例如;我有一个从GROUP和HAVING子句返回1000条记录的多个表中选择。如果我将该选择放入一个过程中,hibernate开发人员是否可以简单地调用该过程,并以与仅在hibernate中创建select相同的方式使用这些记录?

非常感谢, 大卫

回答

1

Hibernate是框架用于映射对象定向域模型到传统的关系数据库。在使用hibernate时,执行插入,更新,删除等操作变得更加容易。 开发人员必须执行像foo.save(),foo.update()这样的简单操作,而hibernate会将其内部转换为sql查询并在数据库上执行。它使任务变得简单。最重要的是,如果您碰巧改变使用的数据库,您的代码不会改变一点(配置除外)。

所以,最好的办法是:

  • 使用Hibernate而不是调用程序,所有的时间。
  • 如果您想使用某些复杂任务的过程,可以使用hibernate调用过程。休眠时有多种方法可以通过它调用过程。所以,这里没有问题。

选择查询: 无需使用过程来调用select。 Hibernate有非常简单的选择方式,它返回对象列表!不需要将结果映射到对象。 例如:

Query query = session.createQuery("from table where columnName = 'value' "); 
List list = query.list(); 

返回对象列表。不需要将resultSet显式映射到对象。

在这里写下ORM的所有优点是不可能的,请阅读ORM工具提供的优势,然后决定您的策略。

0

Hibernate是一个ORM,它可以让你有一些优势。例如使用hql,你不需要在不同的数据库(postegres,mysql等)上使用不同查询的原生sql。所以你不需要在不同的数据库上改变你的查询和其他东西,比如模型等等。

相关问题