我目前正在使用 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>
我使用Mysql数据库。这不是一个优雅的解决方案,但有效......
<column name="user_id" valueComputed="(SELECT MAX(id) FROM xxx_user)"/>
假设列
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
。