2014-02-03 2 views
2

Следующий код seqment должен вставить новую запись и вернуть ее (с автогенерированным идентификатором). Он отлично работает для PostgreSQL.Slick 2.0 «возвращающий» элемент не работает для базы данных H2

val ret = elementTableQuery.returning(elementTableQuery) += Element("Arg1", "Arg2", "Arg3") 

Исключение, которое выбрасывается в:

JdbcSQLException: Invalid value "2" for parameter "columnIndex" [90008-172] (DbException.java:329) 
org.h2.message.DbException.getJdbcSQLException(DbException.java:329) 
org.h2.message.DbException.get(DbException.java:169) 
org.h2.message.DbException.getInvalidValueException(DbException.java:215) 
org.h2.jdbc.JdbcResultSet.checkColumnIndex(JdbcResultSet.java:3088) 
org.h2.jdbc.JdbcResultSet.get(JdbcResultSet.java:3116) 
org.h2.jdbc.JdbcResultSet.getString(JdbcResultSet.java:279) 
ch.xxx.test.data.ElementCreator$.create(InitialDataCreator.scala:199) 

В заявлении также работает (в PorstgreSQL и H2), если я удалить "возвращение" части. Он также работает, если я только вернуть сгенерированный Id как:

val ret = elementTableQuery.returning(elementTableQuery.map(_.id)) += Element("Arg1", "Arg2", "Arg3") 

Я нашел сообщение об ошибке (https://github.com/slick/slick/issues/230), который, кажется, относится с той же проблемой, но был закрыт, потому что она не может быть воспроизведена.

Должен ли я открыть новую ошибку? Что-то не так с моим запросом?

Я благодарен за любой ввод.

ответ

1

Похож на ошибку. Пожалуйста, откройте проблему и предоставите нам достаточно информации, чтобы воспроизвести проблему. Благодаря

2

Согласно http://slick.typesafe.com/doc/2.0.0/queries.html#inserting

Обратите внимание, что многие системы баз данных позволяют только один столбец должен быть возвращен, который должен быть первичным ключом Автоинкрементный стола. Если вы запрашиваете другие столбцы, SlickException запускается во время выполнения (если база данных не поддерживает его).

Я не совсем уверен, но может случиться так, что H2 разрешает возвращать первичный ключ с автоматическим приращением. Это объясняет, почему это исключение выбрасывается.

+0

Спасибо за ваш ответ, это именно то, что мне нужно было знать. Я изменил свой код, чтобы возвращать автоматически сгенерированный первичный ключ. –

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