Как вставить автоинкрементные основные / подчиненные записи с помощью ScalaQuery? - PullRequest
1 голос
/ 27 ноября 2011

Классическая проблема, новые рамки - таким образом, проблема.

PostgreSQL + Scala + ScalaQuery. У меня есть мастер-таблица с серийным (autincrement) идентификатором и ведомая таблица также с серийным идентификатором.

Мне нужно вставить одну основную запись и несколько рабов. Я должен сделать это в рамках транзакции (чтобы иметь возможность отменить все), поэтому я не могу выполнить запрос после вставки мастера, чтобы узнать идентификатор. Насколько я вижу, метод SQ "insert" не возвращает никаких ссылок на вставленную основную запись.

Так как это сделать?

Примеры SQ охватывают это, однако без автоинкрементного поля, поэтому такое решение (предварительно установленные идентификаторы) здесь неприменимо.

1 Ответ

0 голосов
/ 29 ноября 2011

Если я правильно понимаю, это пока невозможно автоматически. Если кто-то не боится, это можно сделать таким образом. Получение идентификатора последней вставки (для каждой вставки основной записи):

функция postgreSQL для последнего введенного идентификатора

Затем, используя его в SQ:

http://groups.google.com/group/scalaquery/browse_thread/thread/faa7d3e5842da82e

Этот код показывает путь MySql. Я отправляю это в список для Ради потомков.

val scopeIdentity = SimpleFunction.nullaryLong

val вставлен = Actions.insert ( "кошка", "ест", "собака"

// Распечатать количество вставленных записей. println (вставлено)

// Распечатать первичный ключ для последней вставленной записи. Println (Запрос (scopeIdentity) .first)

// С уважением // Брайан

Но поскольку для автоинкрементных полей вы должны использовать проекции, исключая поля автоинформации, а затем вставлять кортежи вместо именованных типов записей, возникает вопрос, не стоит ли задерживать дыхание, пока SQ не поддержит это напрямую.

Заметьте, я новичок в SQ, возможно, я вас просто дезинформирую.

...