本机存储过程与休眠
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 解析和优化语句都很快,如果我的应用程序是目录的“所有者”,我不喜欢使用存储过程。
使用存储过程,迁移和维护可能会变得更加困难,这超过了微小的性能利润。
案例,我看到了存储过程的好处:
我不是数据库的所有者。对数据的访问由数据库开发人员/维护人员提供(就像您经常在数据仓库中找到的那样)。所以存储过程是数据的接口。 语句很复杂,运行时不可预测或对我的应用程序没有影响(例如触发长时间运行的事务或批处理)。希望这会帮助您做出决定。
【讨论】:
以上是关于本机存储过程与休眠的主要内容,如果未能解决你的问题,请参考以下文章