我刚开始使用Liquibase,偶然发现了一个区分不同数据库功能的问题。
我们希望支持多个数据库(Oracle、MySQL、Derby -仅举三例)。
它们都有不同的功能。具体地说,Oracle支持sequences,而MySQL和Derby则不支持。
当我让hibernate生成DDL时,我可以选择不同的方言,它会考虑这些不同的功能,在使用Oracle时生成Sequencer,在使用Derby或MySQL时使用普通表(用于ID生成)。
现在,我知道可以通过在dbms属性中指定'oracle‘来约束变更集。但是,我如何才能为其他数据库实现普通表解决方案呢?dbms似乎没有'not oracle‘属性。
其他人是怎么处理这个问题的?(我在liquibase页面和论坛上都找不到任何关于它的东西。)
发布于 2012-06-29 02:58:57
尝试在更改集上使用precondition。支持布尔运算。
例如
<preConditions onFail="CONTINUE">
<or>
<dbms type="oracle" />
<dbms type="mysql" />
</or>
</preConditions>发布于 2015-04-08 19:07:21
另一种方法是将所有序列放在一个更改日志文件中,您可以在主更改日志中include该文件,然后执行以下操作:
<changeSet
dbms="oracle,db2,db2i"
author="mccallim (generated)"
id="1419011907193-1"
>
<createSequence
schemaName="${main.schema}"
...该变更集仅对列出的DBMS执行。
https://stackoverflow.com/questions/11246009
复制相似问题