我有带有主键的表,该表由几列组成。有带有特殊Oracle挂钩的批处理插入-ignore_row_on_dupkey_index。该挂钩允许忽略唯一约束异常,重复记录只是被忽略,而非重复记录则可以成功插入。使用简单的jdbc,我可以通过代码轻松返回主键(由几列组成):

try(PreparedStatement st = connectio.preparedStatement("insert /* ignore_row_on_dupkey(Table_name, Constraint) */ into TABLE(c1, c2, c3) values(?,?,?)", new String [] {"c1", "c2"})) {
//Batch insert then get generated keys
}


然后,我可以通过遍历返回的键来分析重复项。

我想通过MyBatis实现相同的目标。我找到了Options批注,该批注允许通过设置属性useGeneratedKeys和keyColumn来实现。问题是我有复杂的主键,而keyColumn的类型为String。
我也不想使用SelectKey注释。

所以我的问题是我可以返回几个列的值吗?

谢谢。

最佳答案

keyColumn允许指定多个列。这是the documentation的相关部分(请注意最后一句话):


  keyColumn | (仅插入和更新)使用生成的键设置表中的列名称。仅当键列不是表中的第一列时,才在某些数据库(如PostgreSQL)中需要这样做。如果需要多个生成的列,则可以是用逗号分隔的列名称列表。


还有一个来自mybatis tests的示例:

<insert id="insertTable2WithGeneratedKeyXml" useGeneratedKeys="true"
    keyProperty="nameId,generatedName" keyColumn="ID,NAME_FRED">
  insert into table2 (name) values(#{name})
</insert>

关于java - 在MyBatis(Oracle)中插入后如何返回多个生成的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55915746/

10-10 06:30