2

以下代码序列应插入一个新条目并返回它(使用自动生成的 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),它似乎涉及同样的问题,但由于无法复制而被关闭。

我应该打开一个新错误吗?我的查询有什么问题吗?

我感谢任何意见。

4

2 回答 2

2

根据http://slick.typesafe.com/doc/2.0.0/queries.html#inserting

请注意,许多数据库系统只允许返回单个列,该列必须是表的自动递增主键。如果您要求其他列,则会在运行时引发 SlickException(除非数据库实际上支持它)。

我不完全确定,但可能是 H2 只允许返回自动递增的主键。这可以解释为什么抛出这个异常。

于 2014-02-07T08:43:12.493 回答
1

看起来像一个错误。请打开一个问题并向我们提供足够的信息来重现该问题。谢谢

于 2014-02-03T14:34:10.313 回答