我一直在玩Play并在尝试将一些示例数据保存到PostrgeSQL时遇到问题。
我知道我可以将UUID转换为String并以这种方式保存,但是我无法使用UUID。
我得到的错误:
注入构造函数时出错,java.sql.BatchUpdateException:批处理条目0插入“COMPANIES”(“ID”,“NAME”)值(?,'Amazon')中止:ERROR:列“ID”属于类型uuid但表达式是bytea类型
我的依赖项:
libraryDependencies += "org.postgresql" % "postgresql" % "42.1.4"
libraryDependencies += "com.typesafe.play" %% "play-slick" % "3.0.1"
公司案例类:
case class Company(id: UUID = UUID.randomUUID, name: String)
光滑的表定义:
val companies: TableQuery[Companies] = TableQuery[Companies]
class Companies(tag: Tag) extends Table[Company](tag, "COMPANIES") {
override def * : ProvenShape[Company] = (id, name) <> (Company.tupled, Company.unapply)
def id: Rep[UUID] = column[UUID]("ID", O.PrimaryKey, O.SqlType("UUID"))
def name: Rep[String] = column[String]("NAME")
}
在日志中,我注意到UUID确实被转换为字节:
[debug] s.j.J.statement - Preparing statement: insert into "COMPANIES" ("ID","NAME") values (?,?)
[debug] s.j.J.parameter - /-------------+-----------\
[debug] s.j.J.parameter - | 1 | 2 |
[debug] s.j.J.parameter - | Bytes | String |
[debug] s.j.J.parameter - |-------------+-----------|
[debug] s.j.J.parameter - | [B@17c2de51 | Amazon |
[debug] s.j.J.parameter - | [B@6a4e93d5 | Google |
[debug] s.j.J.parameter - | [B@69f81ed7 | Microsoft |
[debug] s.j.J.parameter - \-------------+-----------/
我真的很感激一些帮助或提示。
答案 0 :(得分:1)
您必须导入数据库系统的特定配置文件。在你的情况下:
import slick.jdbc.PostgresProfile.api._
虽然我建议注入配置提供程序,然后导入该api。这样,如果您配置另一个数据库管理系统,您的代码将会起作用。
class DAO @Inject()(@NamedDatabase("DB_NAME_FROM_CONFIG") protected val dbConfigProvider: DatabaseConfigProvider)
(implicit ec: ExecutionContext) {
import profile.api._
...
}