Как вернуть несколько сгенерированных столбцов после вставки в MyBatis (Oracle) - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть таблица с первичным ключом, которая состоит из нескольких столбцов. Существует пакетная вставка со специальным хуком 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. Я нашел Параметры аннотации, что позволяет сделать это, установив свойство useGeneratedKeys и keyColumn . Проблема в том, что у меня сложный первичный ключ, тогда как keyColumn имеет тип String. Также я не хочу использовать SelectKey аннотацию.

Итак, мой вопрос, могу ли я вернуть значение нескольких столбцов и как по MyBatis или нет?

Спасибо.

1 Ответ

1 голос
/ 30 апреля 2019

keyColumn позволяет указать несколько столбцов.Вот соответствующий фрагмент документации (обратите внимание на последнее предложение):

keyColumn |(только вставка и обновление) Устанавливает имя столбца в таблице с сгенерированным ключом.Это требуется только в определенных базах данных (например, PostgreSQL), когда ключевой столбец не является первым столбцом в таблице.Может быть разделенным запятыми списком имен столбцов, если ожидается несколько сгенерированных столбцов.

И пример из mybatis tests :

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