2012-02-05 5 views
2

Это пример кода из zentasks Встроенный в PLAY2 в:Как понять синтаксический анализатор анонса play2?

object Project { 

    // -- Parsers 

    /** 
    * Parse a Project from a ResultSet 
    */ 
    val simple = { 
    get[Pk[Long]]("project.id") ~ 
    get[String]("project.folder") ~ 
    get[String]("project.name") map { 
     case id~folder~name => Project(id, folder, name) 
    } 
    } 
} 

Пожалуйста, обратите внимание на ключи поля: project.id, project.folder, project.name.

Что означает project? Откуда он?

Посмотрите на метод запроса:

def findById(id: Long): Option[Project] = { 
    DB.withConnection { implicit connection => 
     SQL("select * from project where id = {id}").on(
     'id -> id 
    ).as(Project.simple.singleOpt) 
    } 
    } 

SQL, является select * from project ..., результат должен быть:

id | folder | name 

Не:

project.id | project.folder | project.name 

Почему мы должны указать ключи как project.???, но не field name напрямую?

Как использовать play2 project.?

ответ

0

В соответствии с кодом, доступным в here, Anorm Parser использует строку при условии, чтобы получить данную колонку.

Поскольку он получает некоторые метаданные, для его работы требуется полная область поля (таблица + имя).

0

ИМХО это просто псевдонимы базы данных.

select id, folder, name from project 

такое же, как

select project.id, project.folder, project.name from project 

или даже

select p.id, p.folder, p.name from project p 
+0

К сожалению, это не псевдонимы DB. Это зависит от метода 'rs.getMetaData.getTableName (col)' jdbc-драйвера. – Freewind