170 похожих чатов

Сталкивался ли тут кто-нибудь с проблемой округления микросекунд у Instant'а?

Поясню чуть подробнее: в базе данных хранятся инстанты (timestamp'ы в формате date & time), которые допускают 6 знаков после запятой. Например 2021-10-13T15:04:24.944921Z https://www.cockroachlabs.com/docs/stable/timestamp.html#syntax

Во время создания/обновления сущностей внутри транзакции хибер в начале кладёт сущность в кэш (перед тем как закоммитить), при этом аудит из spring data указывает дату создания сущности посредством некоторых махинаций вокругInstant#now(). По итогу приходит инстант с 9-ю знаками после запятой, например: 2021-10-13T07:14:47.791616921Z. Я не могу просто взять и вызвать Instant#truncatedTo с кастингом под микросекунды, всё потому, что данный метод не округляет к большему значению данный инстант, а вот при записи в базу он округляется. https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html#truncatedTo-java.time.temporal.TemporalUnit-

Есть ли элегантное решение данной проблемы?

P.S: важно отметить, что данная проблема актуальна только для получения сущности, ведь при создании возвращается новосозданная сущность с 9-ти значными микросекундами. Т.е конвертируется в дто. В базе все хранится в соответствии со стандартами.

18 ответов

20 просмотров

А в чем конкретно проблема? Ну режит и режит, бог с ним. Там с кэш-ом hiber-а какие то проблемы?

Aleksandr- Автор вопроса
Даниил Разоренов
А в чем конкретно проблема? Ну режит и режит, бог ...

Проблема с округлением. В базе хранится дейт не подрезанный, а с округлением. Пример: 2021-10-13T07:14:47.791616921Z -> 2021-10-13T07:14:47.791617Z

Aleksandr- Автор вопроса
Даниил Разоренов
А в чем конкретно проблема? Ну режит и режит, бог ...

Нет, с кэшом все в норме. Я описал подробнее проблему, чтобы был ясен полный контекст. А вопрос связан исключительно с округлением инстанта.

Aleksandr
Нет, с кэшом все в норме. Я описал подробнее пробл...

какие негативные эффекты возникют из-за округления?

Aleksandr- Автор вопроса
Aleksandr- Автор вопроса
central hardware
от той, которую вы описывете

Я описываю пример с truncatedTo. Если речь про него - то там же и описано почему вариант не подходит. И в доках тоже. Он округляет вниз, не вверх.

Aleksandr
Я описываю пример с truncatedTo. Если речь про нег...

я не справшиваю как вы пытаетесь решить проблему, я спрашиваю, что плохого случиться, если ее не рештать

Aleksandr- Автор вопроса
central hardware
я не справшиваю как вы пытаетесь решить проблему, ...

Проблема неприятная из-за того, что на сущность завязываются внешние системы. Более того, важна унификация.

Если честно, и правда непонятно, в чём проблема. Instant поддерживает 9 знаков, база - 6 знаков. При сохранении происходит округление и при запросе возвращается округлённое значение. Если база не поддерживает наносекунды, никуда от этого не деться.

Aleksandr- Автор вопроса
Alexey Genus 😎
Если честно, и правда непонятно, в чём проблема. I...

Никуда от этого не деться, но мне неясно почему проблематика непонятна. Т.е я к тому, что изначально аудитор по каким-то причинам не округляет. И в теории округление уже идёт на уровне базы у jpa.

Aleksandr- Автор вопроса
Alexey Genus 😎
Ну и пусть округляет, какая разница-то?

Ну так у меня маппинг сущности неточный из-за этого. Я могу написать костыль, но думал, что может кто-то уже сталкивался с такой проблемой на свежей версии джавы...

Aleksandr
Ну так у меня маппинг сущности неточный из-за этог...

у вас сущность биржевой заявки и окргления будет значить для вас милиардные убытки или почему для вас это проблема?

Aleksandr
Ну так у меня маппинг сущности неточный из-за этог...

Я встречался максимум с тем, что тестовые данные с Instant.now(), загруженные в БД, теряют точность до миллисекунд, и чтобы спокойно делать assertEquals приходилось использовать truncatedTo

Aleksandr- Автор вопроса
Vladimir Petraković
Я встречался максимум с тем, что тестовые данные с...

Самое забавное, что база (постгресс и все околоплодное) округляет до большего значения 😳

Похожие вопросы

Обсуждают сегодня

Интересно, нет ли какого-то способа получить из dll не адрес самой метки, а адрес со смещением?
The Bird of Hermes
54
Делал задачу вот такую https://stepik.org/lesson/4985/step/9?unit=1083 получилось такое https://play.haskell.org/saved/ipKrepqe оно работает, тестов много не писал, но работае...
Fedor
22
Hey Does anyone know how can I receive push notifications from Github on my account? The official Github android app doesn't send notifications, and I don't use the email bec...
Jacob
10
что-то я не понимаю, в линуксе отладочную информацию как убрать из бинаря? он что с этой опцией, что без - одного и того же (достаточно большого) размера (да, я про лазарь)
Iluha Companets
13
Это что теперь, любой бот сможет принимать платежи без ебли с юр лицами?
Lencore
8
Всем привет, а может кто-то подсказать какие-то советы или типо того, как оптимальнее всего сапортить сервисы в разных локациях (канада + австралия + евпропа)? Будет ли ошибк...
Stas
8
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Не догоняю немного каким боком тут эппл Вот есть веб (мини) апп, который по факту веб сайт, просто в телеге веб вью и если там оплата, то нежно вот эти приседания?
e\\/gen
7
Почему спрашиваю - поймал падение на совершенно уже пустом проекте, хочу до минимального повторяемого свести... Такой вопрос - вот эти юниты, перечисленные в инспекторе объек...
notme
6
Комрады, как на дельфях вытащить "системный" (т.е. который используется ОСью) шрифт со всеми аттрибутами? Я так понимаю, это не Application.DefaultFont?
Ed Doc
7
Карта сайта