我已经使用Hibernate多年了,从来没有遇到过任何问题,但是刚刚意识到我的大部分工作都涉及CRUD方法,在这种方法中,我需要随意保存和修改数据。
问题是有些人想要制作2个单独的应用程序,一个要批量插入,另一个要对插入的数据执行搜索。
由于这种情况下的持久性有点用处,因此团队希望不使用Hibernate,而是在插入应用程序上使用原始查询,而在查询应用程序上使用jOOQ之类的东西。
那是正确的电话吗?还是我可以说服他们使用Hibernate,而不是“它是我最喜欢的orm框架”?还是甚至没有考虑其他解决方案?
免责声明:我是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或数据库专家,这可能是解决方法。
没有正确或错误的答案。但是您将必须做出务实的决定。