我发现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将无法获得正确的值,因为它不能找出哪个名称属于哪个表.
所以我写了一个测试.
create table a (
id text not null primary key,
name text not …Run Code Online (Sandbox Code Playgroud)