所以我发现slick-pg 解决方案是让它工作的更好方法。如果您只需要代码中的 JSON 支持,即您有一个 DB 列,您只想在使用 Postgres 的 JSON 列类型时将其表示为 Play JsValue,您只需要编写一个混合了适当功能的配置文件来自slick-pg 包。
第 1 步:添加必要的依赖项
libraryDependencies += "com.github.tminglei" %% "slick-pg" % "0.18.0"
libraryDependencies += "com.github.tminglei" %% "slick-pg_play-json" % "0.18.0"
第 2 步:编写配置文件类
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
第 3 步:使用新的个人资料类
因此,您需要扩展 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")
就是这样!