Я получаю исключение времени выполнения при попытке вставить строку JSON в столбец JSON. Строка у меня выглядит как """{"Events": []}"""
, таблица имеет столбец, определенный как status JSONB NOT NULL
. Я могу вставить строку в таблицу из командной строки без проблем. Я определил метод для вставки как:
import play.api.libs.json._
import anorm._
import anorm.postgresql._
def createStatus(
status: String,
created: LocalDateTime = LocalDateTime.now())(implicit c: SQLConnection): Unit = {
SQL(s"""
|INSERT INTO status_feed
| (status, created)
|VALUES
| ({status}, {created})
|""".stripMargin)
.on(
'status -> Json.parse("{}"), // n.b. would be Json.parse(status) but this provides a concise error message
'created -> created)
.execute()
}
, и вызов его вызывает следующую ошибку:
TypeDoesNotMatch(Cannot convert {}: org.postgresql.util.PGobject to String for column ColumnName(status_feed.status,Some(status)))
anorm.AnormException: TypeDoesNotMatch(Cannot convert {}: org.postgresql.util.PGobject to String for column ColumnName(status_feed.status,Some(status)))
Я выполнил множество поисков этой проблемы, но есть ничего об этом конкретном c сценарии использования, который я смог найти, - большинство вытаскивает json столбцов в классы вариантов. Я пробовал немного разные форматы, используя JSValue в Spray- json, JsValue для Play, просто передавая строку как есть и приводя в запросе с ::JSONB
, и все они выдают одинаковую ошибку.
Обновление: вот SQL, который создал таблицу:
CREATE TABLE status_feed (
id SERIAL PRIMARY KEY,
status JSONB NOT NULL,
created TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT NOW()
)