数据库不可知应用程序

时间:2012-01-31 11:16:10

标签: database spring database-agnostic

我正在处理的应用程序的数据库尚未得到业务部门的确认。

  • 最好的猜测是Oracle和DB2。
  • 我所听到的最初是项目将在DB2 V9上运行,然后再运行到Oracle 11g。

我们在这个项目中使用Spring 3.0.5,Hibernate 3.5,JPA2和JBoss 5

那么进入构建阶段和测试阶段的最佳实践是什么?

  1. 我应该先使用DB2构建并稍后担心Oracle(这个 听起来不对)?
  2. 或者,我应该使用JPA(Hibernate)和 然后生成数据库架构?
  3. 还是其他什么?
  4. PS:我无法控制数据库的选择,什么时候以及什么时候,因为这些是由坐在漂亮房间里的人做出的重大支票和大奖金做出的战略决策。

    谢谢, 阿迪

3 个答案:

答案 0 :(得分:4)

如果您编写的应用程序数据库不可知,那么显然您将无法访问数据库的特定功能。除了由JPA和Hibernate完成的自动优化之外,数据库已简化为常用功能。您必须将某些内容设置为自动并且信任JPA / Hibernate才能正确执行,如果您知道数据库(例如id生成器策略),则可以专门设置。

但似乎数据库的特定开发人员功能与决策无关,因此它们与应用程序无关。其他可能影响决策的原因(如价格,金钱,现金,个人关系,管理工具,硬件要求,现有知识和人员)只能被推测。

所以恕我直言,你没有选择。严格避免任何数据库特定的。这包括让JPA / Hibernate生成模式(你的观点#2)。在此项目设置中,您不应手动修改数据库。

嗯......遗憾的是,在JPA / Hibernate开发中存在一些隐藏的陷阱,这些陷阱使得它依赖于数据库(例如,对数函数未被一致地映射)。因此,您应该从第一天开始针对所有可能的数据库运行所有测试。当你写“最好的猜测是......”时,你应该抓住任何可用的数据库并对其进行测试。应该使用给定的堆栈轻松设置。

如果可能的话,您应该尝试加快有关所用数据库的决定。

答案 1 :(得分:2)

只需“使用JPA(Hibernate)编写”将其开发为与数据库无关。将所有业务逻辑放在java代码而不是存储过程中。

如果你使用弹簧,你不需要jboss,你只能使用tomcat,大约四分之一的脚印,以及更简单的imho。

Spring vs Jbossjboss represents all that is bad, while spring represents all that is good in Java enterprise development

答案 2 :(得分:0)

我们已经添加了这个问题,并且不得不在项目后期进行迁移,导致大量额外的工作,挫折和延迟。

我的建议是定义一个抽象层。转到你没有任何数据库的数据模型,比如表格或文本文件。

然后,当您必须切换到某个数据库时,您可以对其进行优化,同时可以继续在任何已开发的模型上继续进行应用程序开发。因此,当您调整DB2层时,不要在应用程序上延迟开发人员。当一切都经过适当验证后,团队可以开启它。