我在我的架构中有一个Postgres的'json'列。
这是我代码中的列映射:
def my_col = column[Option[String]]("my_col")
哪些不起作用,插入时我得到的堆栈跟踪显示:
列“my_col”是json类型,但表达式是字符变量
我也试过这个:
def my_col = column[Option[String]]("my_col", O.SqlType("json"))
同样也会产生相同的错误。
我在我的架构中有一个Postgres的'json'列。
这是我代码中的列映射:
def my_col = column[Option[String]]("my_col")
哪些不起作用,插入时我得到的堆栈跟踪显示:
列“my_col”是json类型,但表达式是字符变量
我也试过这个:
def my_col = column[Option[String]]("my_col", O.SqlType("json"))
同样也会产生相同的错误。
因此,我发现使用slick-pg
解决方案是使其正常工作的更好方式。如果你只需要在代码中支持 JSON,即你有一个数据库列,你只想用 Play JsValue
表示,同时使用 Postgres 的 JSON 列类型,那么你只需要编写一个配置文件,从slick-pg
包中混合相应的功能。
libraryDependencies += "com.github.tminglei" %% "slick-pg" % "0.18.0"
libraryDependencies += "com.github.tminglei" %% "slick-pg_play-json" % "0.18.0"
import com.github.tminglei.slickpg._
import slick.basic.Capability
import slick.jdbc.JdbcCapabilities
trait PostgresProfile extends ExPostgresProfile with PgPlayJsonSupport {
def pgjson = "jsonb"
override protected def computeCapabilities: Set[Capability] =
super.computeCapabilities + JdbcCapabilities.insertOrUpdate
override val api = PostgresJsonSupportAPI
object PostgresJsonSupportAPI extends API with JsonImplicits
}
object PostgresProfile extends PostgresProfile
因此,您需要扩展HasDatabaseConfigProvider
,但要使用您在步骤#2中定义的特征进行参数化,例如:
class MyEntityRepository @Inject() (
protected val dbConfigProvider: DatabaseConfigProvider
... // plus whatever other components you need, probably an ExecutionContext
) extends HasDatabaseConfigProvider[PostgresProfile] {
import PostgresProfile.api._
...
}
这是很容易的一部分。在上面的类中,MyEntityRepository
编写一个私有或包可见的 Slick 类,该类扩展 Table
并像这样简单地定义您的列:
def someColumnName = column[JsValue]("some_column_name")
就是这样了!
json
数据类型。因此,您需要编写“包装器”来处理它。通过下面的链接,作者在数据库层面上处理了json
数据:
http://www.pateldenish.com/2013/05/inserting-json-data-into-postgres-using-jdbc-driver.html