Следующий код 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), который, кажется, относится с той же проблемой, но был закрыт, потому что она не может быть воспроизведена.
Должен ли я открыть новую ошибку? Что-то не так с моим запросом?
Я благодарен за любой ввод.
Спасибо за ваш ответ, это именно то, что мне нужно было знать. Я изменил свой код, чтобы возвращать автоматически сгенерированный первичный ключ. –