Pergunta

Eu tenho uma tabela postgres -

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

Estou tentando obter valores de campo type e status de volta ao meu aplicativo 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)
  }
}

e obter erro:

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

Parece que 'Char' não é compatível com anorm.O que devo mudar no meu código?É uma boa prática usar get[String]("status") e então status.head como solução alternativa?

Foi útil?

Solução

Eu acho que você poderia escrever um conversor implícito para o seu char colunas.Isso ficaria assim:

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))
        }
    })
  }

Então certifique-se de que este conversor esteja no escopo.

Não tenho certeza se o valor seria uma String mas você pode verificar e fazer as correções correspondentes.

Outras dicas

Recentemente, houve uma fusão de PR no Anorm sobre isso: https://github.com/playframework/playframework/pull/2189

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top