2

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

  • 最好的猜测是 Oracle 和 DB2。
  • 我听说最初该项目将与 DB2 V9 一起上线,然后到 Oracle 11g。

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

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

  1. 我应该先使用 DB2 构建,然后再担心 Oracle(这听起来不对)吗?
  2. 或者,我应该使用 JPA (Hibernate) 编写然后生成数据库模式吗?
  3. 或者是其他东西?

PS:我无法控制 DB 的选择、什么和什么时候,因为这些是坐在漂亮房间里的人获得丰厚支票和巨额奖金的战略决策。

谢谢,阿迪

4

4 回答 4

4

显然,如果您正在编写与数据库无关的应用程序,那么您将失去对数据库特定功能的访问权限。除了由 JPA 和 Hibernate 完成的自动优化之外,该数据库已简化为通用功能。如果您知道数据库(例如 id 生成器策略),您必须将一些事情设置为自动并信任 JPA/Hibernate 才能正确地进行设置。

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

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

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

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

于 2012-01-31T11:35:56.460 回答
2

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

如果你使用的是spring,你不需要jboss,你可以只使用tomcat,大约四分之一的脚印,更简单的恕我直言。

Spring 与 Jbossjboss 代表了所有不好的东西,而 Spring 代表了 Java 企业开发中的所有优点

于 2012-01-31T11:18:25.690 回答
0

我不同意当前接受的建议避免数据库特定事物的答案。从性能的角度来看,这将是一个遗憾,这绝对是可行的。

JPA/HibernatejOOQ可以抽象很多东西,如果您使用任何一种技术的查询构建器 API(JPA 中的标准查询,或用于更高级 SQL 的 jOOQ),您可以在与供应商无关的方式中走得很远不删除所有供应商特定的东西。例如,您可以像这样轻松地创建特定于供应商的谓词:

.where(oracle ? oracleCondition() : db2Condition())

从这样一个项目的一开始,你应该做的是,一旦你知道你必须支持这两种方言,那就是在两个数据库产品上运行集成测试。为此,我推荐testcontainers,这使得运行此类测试变得非常简单。如果您必须添加对另一种方言的支持,并且如果您正在使用上述抽象之一,您可以简单地添加另一个 testcontainers 配置,检查您的应用程序是否仍然有效,调整 2-3 项,然后就可以了。

免责声明:我在 jOOQ 背后的公司工作。

于 2021-08-20T08:36:43.230 回答
0

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

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

然后,当您必须切换到某个数据库时,您可以针对它进行优化,同时可以自由地继续在任何已开发的模型上进行应用程序开发。因此,在调整 DB2 层时,您不会耽误应用程序的开发人员。当一切都得到适当验证后,团队可以打开它。

于 2017-01-20T13:20:26.347 回答