Динамическое определение часового пояса для собственного запроса в режиме гибернации

#hibernate #jdbc #timezone #quarkus #utc

Вопрос:

Я извлекаю DATE поле из таблицы базы данных mariadb. Я специально не использую TIMESTAMP , потому что бизнес-требование — это дата без времени. Я хочу использовать UTC для всех вычислений и быть независимым от любого часового пояса. База данных использует UTC. В производственной среде JVM тоже используется UTC, и все казалось нормальным. Теперь при локальном запуске интеграционного теста на моем компьютере, использующем часовой пояс CET, интеграционный тест сломался, поэтому я определил, что у меня здесь проблема.

Я мог бы, конечно, запустить JVM, -Duser.timezone=UTC но это все равно кажется очень подверженным ошибкам. Я также мог бы установить quarkus.hibernate-orm.jdbc.timezone=UTC свое application.properties , но опять же: это тоже не кажется идеальным решением. Я думаю, что должен быть способ динамически для собственного запроса определять используемый часовой пояс.

Есть ли более стабильное решение?

Например, есть ли что-то динамичное в этом смысле: Запрос query = this.getEntityManager().createNativeQuery(MY_QUERY); запрос.Часовой пояс(«UTC»);

Таким образом, код всегда будет работать независимо от JVM или каких-либо свойств или параметров запуска.

Комментарии:

1. Как насчет двух решений, о которых вы упомянули, которые кажутся вам подверженными ошибкам? Какие ошибки вы предвидите?

2. Что используется другое приложение.свойства или что JVM не запускается с настройкой user.timezone=UTC. Это приведет к получению неверных данных, и, возможно, их даже не заметят.