【问题标题】:Hibernate Queries v Database functions休眠查询 v 数据库函数
【发布时间】:2014-02-10 03:37:14
【问题描述】:

我正在管理一个使用 PostgreSQL 数据库的 Spring Web App 的开发。

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

我了解休眠的基本概念,但肯定不了解它必须提供的全部功能。我想拥有数据层的可见性和控制权,但想要最好的解决方案,所以会选择最好的。

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

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

How to construct advanced Hibernate Query with OR and summarize functions

如果一个函数/过程写在数据库上并被hibernate调用,Java开发人员可以简单地调用它们(即调用myFunction(param)或调用myProc(param))并使用完全相同的结果集好像他在休眠中构造了查询?例如;我从带有 GROUP 和 HAVING 子句的多个表中进行选择,它们返回 1000 条记录。如果我将该选择放入一个过程中,休眠开发人员可以简单地调用该过程并以与仅在休眠中创建选择相同的方式使用记录吗?

非常感谢, 大卫

【问题讨论】:

    标签: java sql spring hibernate


    【解决方案1】:

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

    所以,最好的方法是:

    • 使用休眠而不是一直调用过程。
    • 如果你想使用程序处理一些复杂的任务,你可以使用hibernate调用程序。在hibernate中有多种方法可以调用procedure。所以,这里没问题。

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-11
        • 2014-08-08
        • 2013-12-20
        • 2013-11-07
        • 1970-01-01
        • 2021-01-15
        • 1970-01-01
        • 2020-09-22
        相关资源
        最近更新 更多