Size: a a a

2020 December 14

OT

Oleksandr Taranovsky... in JUG.ru
Вообще хибернейт очень много чего делает под капотом за тебя для обеспечения своей работы
источник

OT

Oleksandr Taranovsky... in JUG.ru
Например какое-то время назад встретил баг, где за пару недель сбрасывался сиквенс типа long - то есть начинали повторятся ид, что в свое время взорвало мозг
источник

DL

Dmitriy Lukianov in JUG.ru
hibernate делает всякие интересные действия в транзакционных методах. При save в транзакции он моментально вызывает next у seq и id сразу становится доступным после вызова, а по факту сущность уже позже сохраняется. Это было бы невозможно если бы он не использовал такой подход.
Да и serial у постгреса это sequence с привзякой к колонке, по сути он его использует просто напрямую.
источник

JL

Johny Larson in JUG.ru
Oleksandr Taranovskyi
Вообще хибернейт очень много чего делает под капотом за тебя для обеспечения своей работы
это я знаю, но что интересно, в статистике запросов хибера и даже в статистике которую можно собирать в бд нет запросов на создание сиквенсов
источник

ES

Eugene Svalukhin in JUG.ru
Johny Larson
это я знаю, но что интересно, в статистике запросов хибера и даже в статистике которую можно собирать в бд нет запросов на создание сиквенсов
а вы таблицы через Hibernate создаете?
источник

OT

Oleksandr Taranovsky... in JUG.ru
Оказалось, что хибер вместо того, чтобы на каждый чих ходить в сиквенс - кешировал его значения и оптимистично выделял будующие значения сиквенса, и делал это неправильно, что-то типа след значение = текущее значение умножить на 50
источник

OT

Oleksandr Taranovsky... in JUG.ru
Баг неприятный, но поведение логичное - дает огромное преимущество в производительности
источник

JL

Johny Larson in JUG.ru
Eugene Svalukhin
а вы таблицы через Hibernate создаете?
да
источник

JL

Johny Larson in JUG.ru
Oleksandr Taranovskyi
Оказалось, что хибер вместо того, чтобы на каждый чих ходить в сиквенс - кешировал его значения и оптимистично выделял будующие значения сиквенса, и делал это неправильно, что-то типа след значение = текущее значение умножить на 50
allocationSize по умолчанию 50, да )
источник

JL

Johny Larson in JUG.ru
если я ничего непутаю
источник

OT

Oleksandr Taranovsky... in JUG.ru
Johny Larson
это я знаю, но что интересно, в статистике запросов хибера и даже в статистике которую можно собирать в бд нет запросов на создание сиквенсов
С таким не встречался, но интересно конечно)), в какой-то момент хибер все равно должен их создать ведь
источник

AB

Andrey Belyaev in JUG.ru
Johny Larson
почему при использовании хибернейт + identity генератор + postgres для сущностей создаются сиквенсы?
https://www.postgresql.org/docs/9.1/datatype-numeric.html - там ещё, если используешь SERIAL тип для столбца, то SEQUENCE автоматом создается.

Не в тему, но можно ещё почитать:
https://vladmihalcea.com/postgresql-serial-column-hibernate-identity/
источник

OT

Oleksandr Taranovsky... in JUG.ru
Andrey Belyaev
https://www.postgresql.org/docs/9.1/datatype-numeric.html - там ещё, если используешь SERIAL тип для столбца, то SEQUENCE автоматом создается.

Не в тему, но можно ещё почитать:
https://vladmihalcea.com/postgresql-serial-column-hibernate-identity/
Ну кстати да, возможно так же какое-то специфичное поведение базы данных
источник

OT

Oleksandr Taranovsky... in JUG.ru
В посторес не эксперт...
источник

JL

Johny Larson in JUG.ru
Andrey Belyaev
https://www.postgresql.org/docs/9.1/datatype-numeric.html - там ещё, если используешь SERIAL тип для столбца, то SEQUENCE автоматом создается.

Не в тему, но можно ещё почитать:
https://vladmihalcea.com/postgresql-serial-column-hibernate-identity/
у меня просто
@Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private Long id;
источник

AP

Alex Pimenov in JUG.ru
Oleksandr Taranovskyi
Оказалось, что хибер вместо того, чтобы на каждый чих ходить в сиквенс - кешировал его значения и оптимистично выделял будующие значения сиквенса, и делал это неправильно, что-то типа след значение = текущее значение умножить на 50
не баг, а фича - советую блог Влада по гиберу в целом, ранее по дефолту был hilo
https://vladmihalcea.com/migrate-hilo-hibernate-pooled/
источник

JL

Johny Larson in JUG.ru
+,отличный блог и книга отличная у него
источник

OT

Oleksandr Taranovsky... in JUG.ru
Ну я понимаю, что фича, но смысл был в том, что вот такое выделение как-то неправильно сохранялось в базе, и реально получалось что у нас long id за пару недель полностью исчерпывается
источник

OT

Oleksandr Taranovsky... in JUG.ru
Я понимаю, как работает эта фича и прочему так
источник

AB

Andrey Belyaev in JUG.ru
Johny Larson
у меня просто
@Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private Long id;
Это у вас просто, а хибернейту надо решить, какой DDL для этого сгенерировать 😊 Вот посмотрите, какая стратегия используется, какой DDL генерируется, если вы не сами БД создаете. А если сами - то и не надо хиберу позволять таблицы делать.
источник