input - Slick 2.0 "returning"元素不适用于 H2 数据库

标签 input return-value h2 slick slick-2.0

以下代码片段应插入一个新条目并返回它(带有自动生成的 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/

相关文章:

javascript - 替换输入字段中的错误输入

java - Android - 从另一个类调用 boolean 值

sql - 从函数返回 CASE 表达式的聚合

mysql - 左外连接中的左侧是否可能仅重复一次

c - 如何使用 C 中命令行给出的参数?

reactjs - 如何从输入类型文件元素获取实际文件?

c++ - 缓存 const char * 作为返回类型

mysql - JPA 一元运算符

java - 实体对象未持久保存在 H2 数据库中

javascript - 如何使用 javascript 值设置 HTML 输入字段的值