在 Liquibase 中执行第二次插入时如何引用自动递增的 id?

问题描述 投票:0回答:2

我目前正在使用 Liquibase,并为用户创建了一个表和一个角色表。每个用户都有一个唯一的 ID,该 ID 在插入用户时自动生成(通过自动递增序列)。角色表中的角色将引用此 id。

现在我尝试使用 Liquibase 插入默认用户。首先我插入用户,然后我想插入一个引用这个新创建的用户的角色。

问题是我无法在 Liquibase 中找到一种方法来检索为新用户生成的 id,以便我可以在插入新角色时使用它。

这可能吗?如果是的话应该怎么做?

想做类似以下的事情:

<insert tableName="xxx_user">
    <!-- Id is auto incremented -->
    <column name="user_name" value="XXX" />
    <column name="password" value="XXX" />
    <column name="first_name" value="XXX" />
    <column name="last_name" value="XXX" />
</insert>

<insert tableName="user_role">
    <column name="user_id" value="<point at the auto generated id in previous insert>" />
    <column name="role" value="A_ROLE" />
</insert>
sql database postgresql liquibase
2个回答
12
投票

我使用Mysql数据库。这不是一个优雅的解决方案,但有效......

    <column name="user_id" valueComputed="(SELECT MAX(id) FROM xxx_user)"/>

0
投票

假设列

xxx_user.user_name
是唯一的:

<column name="user_id" valueComputed="(SELECT id FROM xxx_user WHERE user_name = 'XXX')"/>

使用

MAX(id)
有点冒险:理论上,除了 Liquibase 脚本之外的其他内容可能会在第一个和第二个插入之间添加另一个
xxx_user
条目,导致第二个插入引用错误的
xxx_user

© www.soinside.com 2019 - 2024. All rights reserved.