Сохранение объекта 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"
}