Сохранение объекта Quarkus с OffsetDateTime без смещения / часового пояса

У меня есть приложение Quarkus, в котором я сохраняю данные с помощью Vert.x Reactive PostgreSQL Client.

Вот объектный компонент, который нужно сохранить:

public class SomeEntity {
  public Long id;
  public Integer f1;
  public Boolean f2;
  public SomeType f3;
  public OffsetDateTime f4;
  ...

Проблема в том f4 поле с типом OffsetDateTime. Перед сохранением он имеет значение 2020-09-11T19:07:46.822828+02:00 со смещением +02:00 за Berlin GMT+2

Когда эта запись сохраняется в PotgreSQL, я вижу, что значение (в pgAdmin 4) сохраняется как 2020-09-11 17:07:46.822828+00(в формате UTC без смещения). Когда я забираю его обратно, смещения больше нет.

Я хотел бы вернуть это обратно со смещением часового пояса.

Вот фрагмент кода, который я использую для сохранения сущностей:

@QuarkusTest
public class SomeEntityRepositoryTest {

  static final Duration TIMEOUT = Duration.ofSeconds(2);

  @Inject
  Pool client;

  private Long idToGet;

  @BeforeEach
  public void initDatabase() {
    idToGet = createOne(new SomeEntity(null, 17983,
        false, SomeType.values()[0],
        OffsetDateTime.now()));
  }


  protected SomeEntity from(Row row) {
    return new SomeEntity(row.getLong("id"),
        row.getInteger("f1"),
        row.getBoolean("f2"),
        SomeType.valueOf(row.getString("f3")),
        row.getOffsetDateTime("f4"));
  }

  protected Long createOne(SomeEntity someEntity) {
    return client.preparedQuery("INSERT INTO SOME_ENTITY (f1, f2, f3, f4) "
        + "VALUES ($1, $2, $3, $4) "
        + "RETURNING id, f1, f2, f3, f4")
        .execute(Tuple.of(someEntity.f1,
            someEntity.f2,
            someEntity.f3.toString(),
            someEntity.f4))
        .map(RowSet::iterator)
        .map(iterator -> iterator.hasNext() ? iterator.next() : null)
        .map(this::from)
        .map(inserted -> inserted.id)
        .await()
        .atMost(TIMEOUT);
  }

Вот сценарий создания БД:

CREATE TABLE SOME_ENTITY (
  id SERIAL PRIMARY KEY, 
  f1 integer, 
  f2 boolean, 
  f3 nvarchar, 
  f4 timestamptz
)

Это зависимости от моих build.gradle:

dependencies {
    implementation enforcedPlatform("io.quarkus:quarkus-bom:1.7.3.Final")
    implementation 'io.quarkus:quarkus-resteasy'

    testImplementation 'io.quarkus:quarkus-junit5'
    testImplementation 'io.rest-assured:rest-assured'

    implementation "io.quarkus:quarkus-reactive-pg-client"
    implementation "io.quarkus:quarkus-vertx"
    implementation "io.quarkus:quarkus-resteasy"
    implementation "io.quarkus:quarkus-resteasy-jackson"
    implementation "io.quarkus:quarkus-resteasy-mutiny"
    implementation "io.netty:netty-transport-native-epoll"
    implementation "org.apache.commons:commons-lang3"
    implementation "io.quarkus:quarkus-liquibase"
    implementation "io.quarkus:quarkus-jdbc-postgresql"
}

0 ответов

Другие вопросы по тегам