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

35 просмотров

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

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

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

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

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
Точно, оно. У тебя там имена потоков выставляются?
Александр (Rouse_) Багель
9
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Карта сайта