我在Scala / Play应用程序中使用Slick 2 code generator来生成PostgreSQL数据库的表类。有些字段是JSON类型,它们由生成器转换为String。我想知道我是否能以某种方式使用slick-pg plugin使生成器识别Postgres JSON类型?
我试图直接在slick.driver.PostgresDriver
Build.scala
import slick.driver.PostgresDriver
import com.github.tminglei.slickpg._
trait MyPostgresDriver extends PostgresDriver
with PgArraySupport
with PgDateSupport
with PgRangeSupport
with PgHStoreSupport
with PgPlayJsonSupport
with PgSearchSupport
with PgPostGISSupport {
override val Implicit = new ImplicitsPlus {}
override val simple = new SimpleQLPlus {}
trait ImplicitsPlus extends Implicits
with ArrayImplicits
with DateTimeImplicits
with RangeImplicits
with HStoreImplicits
with JsonImplicits
with SearchImplicits
with PostGISImplicits
trait SimpleQLPlus extends SimpleQL
with ImplicitsPlus
with SearchAssistants
with PostGISAssistants
}
object MyPostgresDriver extends MyPostgresDriver
但我不知道如何在代码生成器例程中使用它而不是标准驱动程序:
SourceCodeGenerator.main(
Array(
"scala.slick.driver.PostgresDriver", //how do I use MyPostgresDriver here?
"org.postgresql.Driver",
"jdbc:postgresql://localhost:5432/db?user=root&password=root",
"app",
"db"
)
)
答案 0 :(得分:4)
你不能让发电机以这种方式拾取类型。它(或者更确切地说是从数据库模式中反向设计模型的Slick代码)当前只检测到一个充满类型的手,并简单地假定所有其他类型的String。这将在未来得到改善。为了使它对列使用不同的类型,您必须自定义生成器。相应的Slick文档示例实际上显示了如何自定义类型:
http://slick.typesafe.com/doc/2.0.0/code-generation.html#customization
答案 1 :(得分:0)
您还可以定义一个直接访问json树的函数
val jsonSQL=
SimpleFunction.binary[Option[String],String,Option[String]]("json_extract_path_text")