【问题标题】:ORM frameworks used for insert only / query only apps用于仅插入/仅查询应用程序的 ORM 框架
【发布时间】:2012-02-12 18:16:05
【问题描述】:

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

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

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

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

【问题讨论】:

  • 似乎您正试图将 Hibernate 放入一个它并不真正适合的孔中,或者至少试图将一个胖子放入一个瘦子中。
  • +1 很好的类比,所以是的,我会休眠来减肥或使用更薄的东西,因为纯粹没有 ORM 太瘦了

标签: hibernate orm jooq


【解决方案1】:

免责声明:我是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 或数据库专家,这可能是您要走的路。

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

【讨论】:

  • 以前从未听说过 jOOQ -- 看起来很漂亮。
  • 感谢您的回答,我认为这是对 OLTP/OLAP 以及我们团队需要思考的非常扎实的解释。
  • @javaNoober:谢谢。我认为,如果您可以在此处发布您的最终团队决定作为附加答案,那么对于该问题的未来访问者来说会很有趣!
【解决方案2】:

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

【讨论】:

  • 我知道这一点,但是我们有很多关于“手工 SQL”层和不同的数据库可移植性的错误,我真的希望我们所有人都使用对象表示,但我认为 Hibernate可能太大了
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • Sormula 看起来很有趣。但是,你应该提到,如果不能使用 GPL 许可证,它就不是免费的(可能就像在这个项目中一样)
    • 它是 GPLv3。我的意图是作为开源分发。也许我在许可声明中遗漏了一些东西? sormula.org/license
    猜你喜欢
    • 1970-01-01
    • 2019-06-13
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 2010-10-22
    • 1970-01-01
    相关资源
    最近更新 更多