一尘不染

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

hibernate

我已经使用Hibernate多年了,从来没有遇到过任何问题,但是刚刚意识到我的大部分工作都涉及CRUD方法,在这种方法中,我需要随意保存和修改数据。

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

由于这种情况下的持久性有点用处,因此团队希望不使用Hibernate,而是在插入应用程序上使用原始查询,而在查询应用程序上使用jOOQ之类的东西。

那是正确的电话吗?还是我可以说服他们使用Hibernate,而不是“它是我最喜欢的orm框架”?还是甚至没有考虑其他解决方案?


阅读 190

收藏
2020-06-20

共1个答案

一尘不染

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

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

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

不过,Hibernate也很好地涵盖了所有这些兼容性方面。因此,您的问题可以归结为:

  • 您是否想使用Hibernate,它不是理想的技术选择,但您知道它并因此可以估计风险?如果团队中的每个人都知道并喜欢Hibernate,并且没有时间学习新事物,这就是方法。

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

    • 带有JdbcTemplates的Spring可以与jOOQ结合使用
    • myBATIS,可以很好地处理SQL。
  • 或者,您可以混合使用各种技术,并使用Hibernate进行更简单的查询,而将普通SQL / jOOQ / Spring / myBATIS /等等用于更复杂的查询。

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

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

2020-06-20