2016-12-21 5 views
3

У меня есть база данных MariaDB, и я пытаюсь вставить строку в таблицу users. Он имеет сгенерированный id, и я хочу получить его после вставки. Я видел this, но это не работает для меня:INSERT..RETURNING не работает в JOOQ

public Integer addNewUser(String name) { 
    Record record = context.insertInto(table("users"), field("name")) 
     .values(name) 
     .returning(field("id")) 
     .fetchOne(); 
    return record.into(Integer.class); 
} 

Новая строка вставляется, но record всегда null. Я не использую генерацию кода JOOQ.

ответ

3

Это известное ограничение в jOOQ 3.9: https://github.com/jOOQ/jOOQ/issues/2943

В настоящее время вы не можете использовать пункт в jOOQ RETURNING при использовании простого SQL, потому что jOOQ нужно знать имя столбца идентичности связывается с JDBC (в большинстве баз данных) , К сожалению, передать столбец ID в предложение RETURNING недостаточно, поскольку нет гарантии, что это столбец идентификатора. Вы также можете передать несколько столбцов в пункт RETURNING, в случае чего jOOQ не будет знать, какой из них будет столбцом идентификации.

+0

Спасибо за ответ. Итак, мне нужно будет запросить максимальное значение и добавить 1, правильно? Есть ли другой способ, чтобы воспользоваться автоинкрементами? –

+1

@bigdestroyer: Я бы не стал запрашивать максимальное значение, поскольку это может привести к условиям гонки. Я снова буду искать пользователя по имени, поскольку он, вероятно, уникален. Или вы используете генератор кода jOOQ, в случае которого этот запрос правильно вернет идентификатор. –

+0

Хорошая идея. Благодаря! –

 Смежные вопросы

  • Нет связанных вопросов^_^