我正在管理使用PostgreSQL数据库的Spring Web App的开发。
我正在进行数据库工作并提供脚本(即authenticate_user)供供Hibernate使用的Java开发人员使用。我对Java和Hibernate的了解有限。
我理解hibernate的基本概念,但肯定不是它提供的全套功能。我希望能够看到和控制数据层,但是想要最好的解决方案,所以最好的方法就是这样。
我最初的想法是存储作为函数或过程编写的所有查询/插入/更新脚本,并允许Java开发人员简单地调用它们并使用结果/结果集,而不是在Java中构造hibernate表引用和查询类/ XML文件。我们的Java开发人员说他更愿意使用hibernate来处理所有事情,并且正在转换我的函数/过程。
到目前为止,我们的sql语句非常简单。当他们达到复杂程度(或更高)时会发生什么,如下面的帖子所示?
How to construct advanced Hibernate Query with OR and summarize functions
如果函数/过程写在数据库上并被hibernate调用,Java开发人员可以简单地调用它们(即调用myFunction(param)或调用myProc(param))并使用完全相同的结果集好像他在hibernate中构造了查询一样?例如;我从多个表中选择GROUP和HAVING子句,返回1000条记录。如果我将select放入一个过程,那么hibernate开发人员可以简单地调用该过程并以与在hibernate中创建select的方式相同的方式使用记录吗?
非常感谢, 大卫
答案 0 :(得分:1)
Hibernate框架用于将面向对象的域模型映射到传统的关系数据库。使用hibernate时,执行插入,更新,删除等操作变得更加容易。 开发人员必须执行简单的操作,如foo.save(),foo.update(),并且hibernate将其内部转换为sql查询并在数据库上执行它。它使任务变得简单。最重要的是,如果您碰巧更改了使用的数据库,您的代码将不会改变一点(配置除外)。
所以,最好的方法是:
选择查询: 无需使用调用select的过程。 Hibernate有非常简单的方法来触发select,它返回对象列表!无需将结果映射到对象。 例如:
Query query = session.createQuery("from table where columnName = 'value' ");
List list = query.list();
返回对象列表。无需将resultSet显式映射到对象。
在这里写下ORM的所有优点是不可能的,请阅读ORM工具提供的优势,然后决定您的策略。
答案 1 :(得分:0)
Hibernate是一个ORM,它可以让你获得一些优势。例如,使用hql,您不需要在不同的数据库(postegres,mysql等)上使用具有不同查询的本机sql。所以你不需要在不同的数据库上更改你的查询和其他东西,比如模型等。