本机存储过程与休眠

Posted

技术标签:

【中文标题】本机存储过程与休眠【英文标题】:Native Stored Proc v/s Hibernate 【发布时间】:2009-09-15 08:36:49 【问题描述】:

我是 Hibernate 的新手。

我正在研究云服务数据访问层。

目前我们使用 Hibernate 进行 OR 映射,并使用 Hibernate 注释作为数据访问层。但最近我被要求以这样一种方式实现休眠/数据访问层,即我的存储过程是在 HQL 中,我们可以在短时间内更改我们的数据库并移植我们的整个代码。

在这方面我能想到的最接近的方法是使用命名查询,其中存储过程位于 DB 端,而我的 hibernate 正在使用命名查询解析存储过程调用。

所有这一切的原因在于,由于存储过程是预编译的,因此它们为大型云服务实现提供了良好的性能和安全优化。

目前我正在使用 java、hibernate 和 mysql

任何人都可以检查我的假设并验证或给出/建议一些更好的选择。

性能和安全性是重中之重。

【问题讨论】:

关于这方面的争论已经在 SO 中进行了深入讨论,主要是这个问题:***.com/questions/274411/… 尽管他们谈论的是 SQL Server。另请参阅:***.com/questions/50346/…。对于整个 enchalada,请查看:***.com/… 【参考方案1】:

我认为您概述的方法很棒。

如果我处于你的位置,这正是我会做的。 (我也在使用由 MySql 支持的 Hibernate,并且出于性能原因考虑过这样做。)

【讨论】:

【参考方案2】:

由于大多数 DBMS 解析和优化语句都很快,如果我的应用程序是目录的“所有者”,我不喜欢使用存储过程。

使用存储过程,迁移和维护可能会变得更加困难,这超过了微小的性能利润。

案例,我看到了存储过程的好处:

我不是数据库的所有者。对数据的访问由数据库开发人员/维护人员提供(就像您经常在数据仓库中找到的那样)。所以存储过程是数据的接口。 语句很复杂,运行时不可预测或对我的应用程序没有影响(例如触发长时间运行的事务或批处理)。

希望这会帮助您做出决定。

【讨论】:

以上是关于本机存储过程与休眠的主要内容,如果未能解决你的问题,请参考以下文章

从休眠命名查询调用存储过程时出现 SQLException 00604 & 01003

休眠:具有递归深度搜索的存储过程:映射/输出问题

db2 存储过程的休眠时间语法

在 Hibernate 中调用存储过程

如何使用类属性映射休眠中的列?

如何使用 Hibernate con Sql Server 2000 调用存储过程?