2013-11-16 2 views
2

У меня есть Postgres стол -Как получить значения 'Ch' из Postgres с Anorm

CREATE TABLE "Contest" 
(
    id serial NOT NULL, 
    name varchar(100) NOT NULL, 
    type char(1) NOT NULL, 
    status char(1) NOT NULL, 
    ... 
) 

Я пытаюсь получить поле значения type и status назад к моему Play 2.x (Anorm) приложения:

val parseContest = { 
    get[Pk[Int]]("id") ~ 
    get[String]("name") ~ 
    get[Char]("type") ~ 
    get[Char]("status") map { 
    case id~name~c_type~status => 
    Contest(id, name, c_type, status) 
    } 
} 

и получить сообщение об ошибке:

could not find implicit value for parameter extractor: anorm.Column[Char] 

Похоже, 'Чар' не поддерживается anorm. Что я должен изменить в своем коде? Хорошо ли использовать get[String]("status"), а затем status.head как обход?

ответ

1

Я думаю, что вы можете написать неявный конвертер для своих столбцов char. Это будет выглядеть так:

implicit def columnToChar: Column[Char] = { 
    Column[Char](transformer = { 
     (value, meta) => 
     val MetaDataItem(qualified, nullable, clazz) = meta 
     value match { 
      case ch: String => Right(ch.head) 
      case _ => Left(TypeDoesNotMatch("Cannot convert " + value + " to Char for column " + qualified)) 
     } 
    }) 
    } 

Тогда убедитесь, что этот преобразователь находится в зоне действия.

Я не уверен, что значение будет String, но вы можете проверить его и внести соответствующие исправления.