Вопрос

У меня есть таблица postgres -

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 (Анорм):

 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]

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

Это было полезно?

Решение

Я думаю, вы могли бы написать неявный конвертер для вашего 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))
        }
    })
  }

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

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

Другие советы

Недавно объединен PR по поводу этого: https://github.com/playframework/PlayFramework / pull / 2189

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top