java - 使用具有相同 hibernate 映射文件的两个不同数据库

标签 java mysql hibernate testing derby

基本上,这个想法是为两个不同的底层数据库使用相同的 hibernate 映射文件。在生产中,底层数据库是 MySQL5,出于测试目的,我想使用 Apache Derby——以避免为测试目的设置和维护各种 MySQL 数据库。

我希望只需切换 DataSource 的驱动程序并更改一些参数就可以完成这项工作,但我已经遇到了一些小困难。所以实际上有两个问题。第一个具体问题是:

我。如果数据类型在 MySQL 中可用但在 Derby 中不可用,是否可以告诉 Derby 使用哪种数据类型。映射如下:

  <property name="about">
    <column name="`about`" not-null="false" sql-type="text"></column>
  </property>

Derby 不知道 sql 类型的“文本”,因此它拒绝创建表。它是 Derby 10.4.2.0 和 Hibernate 3.2.6。顺便说一下。

二。您在测试和生产中使用两个不同的数据库有什么经验?我知道有一些缺点,例如您无法测试存储过程或特定于数据库的查询 - 但另一方面,它使测试更容易和更快(如果您最终让它运行)。你怎么看?

最佳答案

问题 #1 - 不要指定 sql 类型;使用 Hibernate type相反:

<property name="about" type="string" length="4096"/>

然后,您可以扩展 Hibernate 提供的 Derby(或 MySQL)方言,以根据(未)指定的长度将该类型映射到适当的 DB 类型。以 MySQLDialect 为例;它根据长度将字符串类型映射到 varchar 或其中一种 text 类型。

问题 #2 - 您的意思是使用不同的数据库进行开发和生产吗?因为使用不同的数据库进行测试 和生产就像玩俄罗斯轮盘赌,桶装满了 - 你赢不了 :-)

您始终需要测试所有适用的部署配置。如果您确实需要同时支持开发和生产,那么使用不同的数据库是一个不错的方法,因为它有助于及早定位可移植性问题。

关于java - 使用具有相同 hibernate 映射文件的两个不同数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1710227/

相关文章:

hibernate - Grails 2.5.x GORM持久的人工特性

java - dateadd 函数在 Hibernate 中不起作用

Java SWT GC 未在 Canvas 上绘制文本

java - 如何从表中获取值?

Java 的 equalsIgnoreCase 失败,德语字母表中使用 ß ("Sharp S")

mysql - 学习SQL : Narrowing down a grouped subquery

php - 如何处理 Doctrine 中的死锁?

php - 使用 dlsym 插入库

java - Hibernate 和 JDBC 性能?

java - 无法在 gradle.properties 中设置基于 Windows 的路径