我们在liquibase运行了以下程序:
<property name="UUID-20-off-General-US" value="uuid()" dbms="mysql"/>
<changeSet id="GeneralDiscountRateCard20" author="foo">
<sql dbms="mysql">
INSERT INTO rate (id, pricing_model, name)
VALUES (${UUID-20-off-General-US}, 'CPM', '20% off Discount US');
INSERT INTO rate_map (id, rate_map_name, rate_id)
VALUES (uuid(), 'general_20_discount_us', ${UUID-20-off-General-US})
</sql>
</changeSet>
我们希望看到在两个表中使用相同的uuid(而在另一个表中使用不同的uuid) id
第二张table)。相反,我们发现了3个不同的uuid。他们看起来几乎一模一样,只是数字5-8不同:
0dec159a-ded8-11e8-813e-42010a80044f
0dec7a69-ded8-11e8-813e-42010a80044f
0decc891-ded8-11e8-813e-42010a80044f
^^^^
大概是因为 uuid()
在同一个分数秒左右被调用。
做 <property>
有延迟插值吗?有没有一种方法可以在对的两个引用之间实际拥有相同的uuid <property>
?
1条答案
按热度按时间ftf50wuq1#
打电话
uuid()
将按设计返回不同的uuid,即使在同一查询中使用。运行查询时,将得到以下sql语句:
产生三个不同的uuid。当您想“重用”一个值时,您必须将该值(而不是函数调用)保存在变量/属性中,并使用它,如下所示:
或者你不用硬编码的
<property />
标记并通过ant或命令行传递计算值。