Как представлять Postgres TIMESTAMP БЕЗ ЗОНЫ в Jooq - PullRequest
0 голосов
/ 04 марта 2019

У меня есть приложение Scala, использующее Joda Time Lib, которое подключено к Postgres DB, и я хочу использовать Jooq lib.Я хочу хранить свои данные с отметкой времени в UTC, но я не знаю, как преобразовать их в Jooq.См. Сценарий создания таблицы.

CREATE TABLE some_event (
    id SERIAL NOT NULL PRIMARY KEY,
    timestamp TIMESTAMP NOT NULL,
);

Я пробовал что-то похожее ниже, но это не работает правильно.

  import org.joda.time.DateTime
  import java.time.Instant
  import java.sql.Timestamp

  private val zoneId = ZoneId.of("UTC")
  val converter: Converter[Timestamp, DateTime] =
    Converter.ofNullable(
      classOf[Timestamp],
      classOf[DateTime],
      (t: Timestamp) => {
        val i = t.toInstant
        val z = ZonedDateTime.ofInstant(i, zoneId)
        new DateTime(z.toInstant.toEpochMilli)
      },
      (t: DateTime) => {
        val i = Instant.ofEpochMilli(t.getMillis)
        val z = ZonedDateTime.ofInstant(i, zoneId)
        Timestamp.from(z.toInstant)
      },
    )
  protected val DATE_TIME_TYPE: DataType[DateTime] = SQLDataType.TIMESTAMP.asConvertedDataType(converter)

  private object SomeEvent {
    val ID: Field[Int] = field("id", classOf[Int])
    val TIMESTAMP: Field[DateTime] = field("timestamp", DATE_TIME_TYPE)
  }

Я также пытался реализовать конвертер с ведьмой OffsetDateTime, но он выбрасывает исключения,Я не могу позволить себе изменить таблицу и использовать TIMESTAMP WITH ZONE.Я использовал Doobie lib в предыдущей реализации, где используется java.time.Instant, но кажется, что Jooq не поддерживает Instant.У вас есть идеи, как это сделать?Спасибо.

...