Java Hibernate查询v数据库函数

Java Hibernate查询v数据库函数,java,sql,spring,hibernate,Java,Sql,Spring,Hibernate,我正在管理使用PostgreSQL数据库的SpringWeb应用程序的开发 我正在做数据库工作,并提供脚本(即authenticate_user),供使用Hibernate的Java开发人员使用。我对Java和Hibernate的接触有限 我理解hibernate的基本概念,但肯定不是它所提供的全部功能。我想要数据层的可视性和控制力,但是想要最好的解决方案,所以我会选择最好的解决方案 我最初的想法是将所有作为函数或过程编写的查询/插入/更新脚本存储起来,并允许Java开发人员简单地调用它们并使用

我正在管理使用PostgreSQL数据库的SpringWeb应用程序的开发

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

我理解hibernate的基本概念,但肯定不是它所提供的全部功能。我想要数据层的可视性和控制力,但是想要最好的解决方案,所以我会选择最好的解决方案

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

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

如果函数/过程是在数据库上编写的,并且由hibernate调用,Java开发人员是否可以简单地调用它们(即调用myFunction(param)或调用myProc(param)),并以与在hibernate中构造查询完全相同的方式使用结果集?例如我有一个从多个表中选择的组和子句,返回1000条记录。如果我将select放入一个过程中,HibernateDeveloper能否简单地调用该过程并使用记录,就像select仅在hibernate中创建一样

非常感谢,,
David

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

因此,最好的办法是:

  • 使用hibernate而不是一直调用过程
  • 如果要对某些复杂任务使用过程,可以使用hibernate调用过程。在hibernate中有多种调用过程的方法。所以,这里没问题
选择查询: 无需使用调用select的过程。Hibernate有一种非常简单的方法来触发select并返回对象列表!无需将结果映射到对象。 例如:

返回对象列表。无需显式地将resultSet映射到对象


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

Hibernate是一种ORM,它可以让您获得一些优势。例如,对于hql,您不需要对不同数据库(postegres、mysql等)上的不同查询使用本机sql。因此,您不需要在不同的数据库上更改查询和其他事情,如模型等

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