相关疑难解决方法(0)

Play2的anorm无法在postgresql上运行

我发现play2的anorm的行解析器依赖于jdbc驱动程序返回的元数据.

所以在play提供的内置示例"zentasks"中,我可以找到这样的代码:

object Project {
  val simple = {
    get[Pk[Long]]("project.id") ~
    get[String]("project.folder") ~
    get[String]("project.name") map {
      case id~folder~name => Project(id, folder, name)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

请注意,这些字段都有project.前缀.

它适用于h2数据库,但不适用于postgresql.如果我使用portgresql,我应该把它写成:

object Project {
  val simple = {
    get[Pk[Long]]("id") ~
    get[String]("folder") ~
    get[String]("name") map {
      case id~folder~name => Project(id, folder, name)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在Play的谷歌小组中问过这个问题,Guillaume Bort说:

是的,如果你使用postgres它可能是原因.postgresql jdbc驱动程序已损坏,并且不返回表名.

如果postgresql的jdbc驱动程序确实有这个问题,我认为anorm会有一个问题: 如果两个表有相同名称的字段,并且我查询它们join,anorm将无法获得正确的值,因为它不能找出哪个名称属于哪个表.

所以我写了一个测试.

1.在postgresql上创建表

create table a (
    id      text not null primary key,
    name    text not …
Run Code Online (Sandbox Code Playgroud)

postgresql scala playframework anorm playframework-2.0

16
推荐指数
1
解决办法
2833
查看次数