2012-01-17 66 views
1

我一直在使用Hibernate很多年,从来没有遇到任何问题,但只是意识到我的大部分工作都涉及CRUD方法,我需要数据来保持持久化和修改随意。用于仅插入/仅查询应用程序的ORM框架

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

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

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

+0

看起来好像你试图让Hibernate进入一个它不适合的洞,或者至少试图让一个胖子变成一个瘦人。 – AHungerArtist 2012-01-17 23:37:03

+0

+1为好比喻,所以你们,我会让Hibernate减肥或者使用更薄的东西,因为纯粹没有ORM就太瘦了 – javaNoober 2012-01-18 01:43:33

回答

4

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

jOOQ正是为您的同事提到的用例而精心设计的。在你的项目中,你不是在做OLTP(CRUD),而是OLAP,这在许多方面对于jOOQ来说是非常好的用例。 jOOQ鼓励使用OLAP功能,比如窗口函数,数据透视表,递归查询,存储过程,数组和非目标数组等等。jOOQ还支持13个不同的数据库,包含所有您希望避免的SQL兼容性细节。一些例子:

  • LIMIT .. OFFSET/TOP .. START AT,etc子句是如何映射到数据库的?
  • 变量如何绑定(有或没有铸造)?
  • 如何支持内置函数?
  • 派生表是否需要用圆括号包装?

尽管如此,所有这些兼容性方面也都涵盖了Hibernate。所以,你的问题涉及回落到这个:

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

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

  • 或者你也可以混合使用技术和使用Hibernate的简单查询和普通的SQL/jOOQ /春/ MyBatis的/等,为更复杂的。

  • 或者您可以使用存储过程处理批量处理和OLAP查询(例如,如果您使用的是Oracle中的PL/SQL),并让数据库执行该操作?如果你的团队中有一位优秀的DBA或数据库专家,这可能是一条路。

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

+0

以前从未听说过jOOQ - 看起来很漂亮。 – AHungerArtist 2012-01-18 12:39:39

+0

感谢您的回答,我认为这是对OLTP/OLAP和我们团队需要考虑的一个非常可靠的解释。 – javaNoober 2012-01-19 01:50:23

+0

@javaNoober:谢谢。我想,如果你可以在这里发布你的最终团队决定作为一个额外的答案,那么这个问题的未来访问者将会很有趣! – 2012-01-19 07:55:44

1

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

+0

我意识到这一点,但是我们有很多关于“手工制作SQL“层和不同的数据库可移植性,我真的希望我们所有人都能使用对象表示,但我认为Hibernate可能太大了 – javaNoober 2012-01-18 01:51:49

1

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

任何优于Hibernate JooQ的参数都将是应用程序对数据进行概念化的一个参数。 Hibernate将数据的行表示抽象为对象。有些程序员不喜欢那样,宁愿亲手做。这可能是他们想要使用JooQ的原因,因此您需要与他们讨论应用程序结构。

1

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

+0

Sormula看起来很有趣。但是,您应该提到,如果不能使用GPL许可证(例如,可能在此项目中),则它不是免费的 – 2012-01-18 11:57:12

+0

这是GPLv3。我的意图是作为开源分发。也许我在我的许可声明中遗漏了一些东西? http://www.sormula.org/license – 2012-01-18 12:55:01

+0

不,实际上您的网页上有足够的信息。我的坏 – 2012-01-18 13:24:25