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 ответов

38 просмотров

А в чем конкретно проблема? Ну режит и режит, бог с ним. Там с кэш-ом 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ć
Я встречался максимум с тем, что тестовые данные с...

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта