以下代码片段应插入一个新条目并返回它(带有自动生成的 ID)。它适用于 PostgreSQL。
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 ),它似乎涉及相同的问题,但由于无法重现而被关闭。
我应该打开一个新的错误吗?我的查询有问题吗?
感谢您的任何意见。
最佳答案
根据http://slick.typesafe.com/doc/2.0.0/queries.html#inserting
Note that many database systems only allow a single column to be returned which must be the table’s auto-incrementing primary key. If you ask for other columns a SlickException is thrown at runtime (unless the database actually supports it).
我不太确定,但可能H2只允许返回自增主键。这可以解释为什么抛出这个异常。
关于input - Slick 2.0 "returning"元素不适用于 H2 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21528523/