ORM框架用于仅插入/仅查询应用程序

时间:2012-01-17 23:30:21

标签: hibernate orm jooq

我多年来一直在使用Hibernate而且从来没有遇到任何问题,但只是意识到我的大部分工作都涉及CRUD方法,我需要数据保持持久化并随意修改。

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

由于在这种情况下持久性有点无用,团队希望不使用Hibernate,而是在插入应用程序上使用原始查询,可能在查询应用程序上使用jOOQ

这是正确的电话吗?或者除了“我最喜欢的orm框架”之外,我怎么能说服他们使用Hibernate呢?或者是否有其他解决方案尚未考虑?

4 个答案:

答案 0 :(得分:4)

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

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

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

Hibernate也很好地涵盖了所有这些兼容性方面。所以你的问题可以追溯到这个:

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

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

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

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

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

答案 1 :(得分:1)

Hibernate是一个对象关系映射。如果他们只对大量数据流进行批量插入和报告,那么他们可能不需要任何对象表示。如果Hibernate需要某种对象表示数据,它们会派上用场。

答案 2 :(得分:1)

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

任何关于优先使用Hibernate而不是JooQ的论据都将成为应用程序如何构思数据的一个论点。 Hibernate将数据的行表示抽象为对象。有些程序员不喜欢这样,而是喜欢手工完成。这可能是他们想要使用JooQ的原因,因此您需要与他们讨论应用程序结构。

答案 3 :(得分:1)

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