使用 H2 数据库时 Quill 中插入或更新操作的编译错误

Posted

技术标签:

【中文标题】使用 H2 数据库时 Quill 中插入或更新操作的编译错误【英文标题】:Compilation error on insert-or-update action in Quill when using H2 database 【发布时间】:2019-06-08 07:58:56 【问题描述】:

在使用 H2 数据库时是否可以在 Quill 中执行插入或更新操作?如果我添加到.insert 操作.onConflictIgnore,我会收到编译错误:

[error] [...]/repository/HeadlinesRepository.scala:41:36: exception during macro expansion: 
[error] java.lang.IllegalStateException: Action ast can't be translated to sql: 'querySchema("headlines").insert(v => v.link -> ?, v => v.title -> ?).onConflictIgnore'
[error]         at io.getquill.util.Messages$.fail(Messages.scala:15)
[error]         at io.getquill.context.sql.idiom.SqlIdiom.$anonfun$actionTokenizer$1(SqlIdiom.scala:387)
[error]         at io.getquill.idiom.StatementInterpolator$Tokenizer$$anon$1.token(StatementInterpolator.scala:17)
[error]         at io.getquill.idiom.StatementInterpolator$TokenImplicit.token(StatementInterpolator.scala:27)
[error]         at io.getquill.context.sql.idiom.SqlIdiom.$anonfun$astTokenizer$1(SqlIdiom.scala:57)
[error]         at io.getquill.idiom.StatementInterpolator$Tokenizer$$anon$1.token(StatementInterpolator.scala:17)
[error]         at io.getquill.context.sql.idiom.SqlIdiom$$anon$1.token(SqlIdiom.scala:49)
[error]         at io.getquill.context.sql.idiom.SqlIdiom$$anon$1.token(SqlIdiom.scala:46)
[error]         at io.getquill.idiom.StatementInterpolator$TokenImplicit.token(StatementInterpolator.scala:27)
[error]         at io.getquill.context.sql.idiom.SqlIdiom.translate(SqlIdiom.scala:39)
[error]         at io.getquill.context.sql.idiom.SqlIdiom.translate$(SqlIdiom.scala:23)
[error]         at io.getquill.H2Dialect$.translate(H2Dialect.scala:20)
[error]         at io.getquill.context.ContextMacro.translateStatic(ContextMacro.scala:51)
[error]         at io.getquill.context.ContextMacro.translate(ContextMacro.scala:37)
[error]         at io.getquill.context.ContextMacro.expand(ContextMacro.scala:24)
[error]         at io.getquill.context.ContextMacro.expand$(ContextMacro.scala:21)
[error]         at io.getquill.context.ActionMacro.expand(ActionMacro.scala:10)
[error]         at io.getquill.context.ActionMacro.expandBatchAction(ActionMacro.scala:121)
[error]         at io.getquill.context.ActionMacro.runBatchAction(ActionMacro.scala:71)

【问题讨论】:

【参考方案1】:

好像没有。

插入或更新(更新插入、冲突)

Postgres、SQLite 和 mysql 支持 Upsert

https://github.com/getquill/quill

【讨论】:

我担心它不支持 H2,我希望我错了。 :) 谢谢你的回答。

以上是关于使用 H2 数据库时 Quill 中插入或更新操作的编译错误的主要内容,如果未能解决你的问题,请参考以下文章

H2仅在不存在时插入行

在Vue项目使用quill-editor带样式编辑器(更改插入图片和视频)

H2:如何插入/更新 varbinary 列

H2数据库做单测数据库时踩到的坑

H2数据库基于一列合并

在 H2 数据库中编写复杂的存储过程