Squeryl

时间:2015-08-19 08:41:23

标签: postgresql scala jdbc squeryl

我正在使用Squeryl 0.9.5-7和Postgres 9.4和jsonb数据类型并希望插入一些数据:

case class Log(id: String, meta: String) //meta will contain json
val logs = table[Log]
logs.insert(Log(randomId, "{\"Hi\": \"I'm a json!\"}"))

但得到了一个类型转换错误,上面写着“列元有jsonb类型,但表达式有不同类型的字符。重写表达式或转换它的类型。”

如何将String字段显式转换为jsonb,以便原始sql参数看起来像?::jsonb

然后,有趣的是如何用Squeryl编写@>->>等json查询?

3 个答案:

答案 0 :(得分:2)

我找到了一种更好的方法,在数据库中创建CAST并不需要。

如果您正在使用squeryl 0.9.6,则可以在架构中添加一个显式强制转换,告知squeryl将字符串显式地转换为jsonb。

on(logs)(s => declare(
   s.meta is (dbType("jsonb").explicitCast) // enables explicit casting into jsonb
 ))

答案 1 :(得分:0)

使用Squeryl 0.9.6,您可以注册对自己的自定义类型的支持。这是an example。对于非标准运营商,请查看custom functions

答案 2 :(得分:0)

根据我对postgres 9.4的经验,阅读作为Squeryl字符串工作正常但插入失败时:

  

错误:列“****”的类型为json,但表达式属于类型   字符变化[错误]提示:你需要重写或转换   表达。 [错误]位置:166 [错误] errorCode:0,sqlState:   42804

所以,我找到的解决方案是在我的postgres数据库中创建一个'AS ASSIGNMENT'演员,这样就可以了:

CREATE CAST(VARCHAR AS JSON)
WITH INOUT
AS ASSIGNMENT