基本上,这个想法是为两个不同的底层数据库使用相同的 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/