Как получить значения 'Char' из Postgres с помощью Anorm
-
21-12-2019 - |
Вопрос
У меня есть таблица 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