我尝试在Quill中使用Scala 2枚举,如下所示:
import io.getquill.MappedEncoding
object MyEnumType extends Enumeration {
type MyEnumType = Value
val ONE, TWO, THREE = Value
implicit val encode: MappedEncoding[MyEnumType, String] =
MappedEncoding(_.toString)
implicit val decode: MappedEncoding[String, MyEnumType] =
MappedEncoding(MyEnumType.withName)
}
但是我在Postgres中遇到了一个错误:
ERROR: operator does not exist: my_enum_type = character varying
Hint: No operator matches the given name and argument types. You might need to add explicit type casts.
我使用translate
打印出查询,查询是这样生成的:
WHERE column_1 = ONE
在这里,我 * 期望 * 它被渲染为:
WHERE column_1 = 'ONE'
在Scala 2.13中使用Quill处理枚举的正确方法是什么?
编辑
我一直在做实验,包括使用Enumeratum库,枚举值仍然不能正确生成。
使用调试器,我可以看到自定义编码器正在被评估,但结果值从未进入生成的查询。
我在这里发布了一个问题的例子:
https://gist.github.com/daharon/97e8b167911723054ac3845fc35c0b11
2条答案
按热度按时间wljmcqd81#
尝试添加引号
uujelgoq2#
问题是,默认情况下,Quill生成的枚举值是
java.sql.Types.VARCHAR
。因此出现了错误operator does not exist: my_enum_type = character varying
,因为Postgres不知道如何将character varying
转换为我自定义的Postgresenum
类型。解决方案是强制Quill将值编码为
java.sql.Types.OTHER
。