1

我已经使用 Hibernate 多年,从来没有遇到过问题,但我刚刚意识到我的大部分工作都涉及 CRUD 方法,我需要数据来保持持久化和随意修改。

这样做的问题是,有些人想要制作 2 个单独的应用程序,一个用于批量插入,另一个用于对插入的数据执行搜索。

由于在这种情况下持久化有点没用,团队不想使用 Hibernate,而是在插入应用程序上使用原始查询,也许在查询应用程序上使用类似jOOQ的东西。

这是正确的电话吗?或者我怎么能说服他们使用 Hibernate,而不是“它是我最喜欢的 orm 框架”?或者是否还有其他没有考虑到的解决方案?

4

4 回答 4

4

免责声明:我是jOOQ的创建者,因此,这个答案有点偏颇。

jOOQ 专为您的同事提到的用例而设计。在您的项目中,您不是在做OLTP (CRUD),而是在做OLAP,这在很多方面都是 jOOQ 的一个非常好的用例。jOOQ 鼓励使用 OLAP 功能,例如窗口函数、数据透视表、递归查询、存储过程、数组和非嵌套数组等。jOOQ 还支持 13 种不同的数据库,其中包含您想要避免的所有 SQL 兼容性细节。一些例子:

  • LIMIT .. OFFSET/TOP .. START AT等子句如何映射到数据库?
  • 变量是如何绑定的(有或没有强制转换)?
  • 如何支持内置函数?
  • 派生表是否需要用括号括起来?

不过, Hibernate也很好地涵盖了所有这些兼容性方面。所以你的问题又回到了这个:

  • 你想使用 Hibernate,它不是完美的技术选择,但你很了解,因此可以估计风险?如果团队中的每个人都知道并喜欢 Hibernate 并且几乎没有时间学习新事物,那么这就是要走的路。

  • 还是您想使用可能更合适的不同框架,但您不太了解它,因此无法估计所有风险?如果您是唯一一个支持 Hibernate 并且您有时间学习新框架的人,那么这可能是您要走的路。您可能要考虑的其他框架:

  • 或者,您可以混合技术并使用 Hibernate 进行更简单的查询,使用普通的 SQL / jOOQ / Spring / myBATIS / 等进行更复杂的查询。

  • 或者您能否使用存储过程(例如,如果您使用 Oracle,则在 PL/SQL 中)处理批量处理和 OLAP 查询并让数据库完成工作?如果您的团队中有一名优秀的 DBA 或数据库专家,这可能是您要走的路。

没有正确或错误的答案。但你必须做出务实的决定。

于 2012-01-18T11:55:27.743 回答
1

Hibernate 是一种对象关系映射。如果他们只对原始数据流进行批量插入和报告,也许他们不需要任何对象表示。如果他们需要某种对象表示他们的数据,Hibernate 会派上用场。

于 2012-01-17T23:35:52.083 回答
1

这是很有可能的。Hibernate 非常适合同时由其他应用程序更新的数据库。唯一的问题是 Hibernate 的内部缓存超时。这意味着在数据库中更新的记录和 Hibernate 看到更新的数据之间可能会有轻微的延迟(几分钟)。我相信这是可配置的。

任何偏好 Hibernate 而不是 JooQ 的论点都将成为应用程序如何概念化数据的一种方式。Hibernate 将数据的行表示抽象为对象。一些程序员不喜欢这样,更喜欢手工完成。这可能是他们想要使用 JooQ 的原因,因此您需要与他们讨论应用程序结构。

于 2012-01-17T23:39:57.250 回答
1

sormula是一个支持 CRUD 的 ORM。您可以将 JDBC 与 sormula 混合使用。它不进行批量插入,但确实有insertAll(java.util.Collection)来插入对象集合。

于 2012-01-18T00:13:44.020 回答