|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
Всем привет Есть две сущности ,ака таблицы Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
ее DDL Код: plsql 1. 2. 3. 4.
вторая сущность и ее таблица Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
ее ддл Код: plsql 1. 2. 3. 4. 5. 6.
вопрос в чем ,в том что сейчас если я беру обычный джава метод и генерую сначала список объектов класса B, затем генериую спискок объектов класса A и туда делаю set <List<B>> и далее делаю saveAll(List<A>) a получаю две заполненные таблицы)) но прикол в том что FK в таблице B null я знаю почему это получается ,потому что во время комита транзакции у хибера еще нет id класса A ,так как генерация по стратегии секвенс.Если поменять на Idenity все будет норм- но у меня как раз обратная задача. Поэтому ворпос к знатокам можно ли в процесее сохраннения сущности А каскадно сохранить и все сущности класса В с корректным FK ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 20:02 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
O_79_O, Код дай. А не рассказом как ты его писал. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 20:19 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
O_79_O, И сиквенс то где? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 20:26 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
O_79_O , я правильно понимаю, что ты смешиваешь IDENTITY & SEQUENCE в одном проекте? Не думаю что это хорошая идея. Когда ты вызываешь save(), то по завершению этого метода Hibernate обязан выдать сущности ID. В случае SEQUENCE все норм - мы просто берем следующую цифру, назначаем ее сущности и возвращаем. При этом никаких запросов в БД не уходит. А в случае IDENTITY порядок другой - ID назначает СУБД, поэтому ORM'у приходится делать сразу же INSERT. Мне кажется эту проблему никак не обойти кроме как сначала сохранять А без B, делать flush(), а затем проставлять коллекцию и снова сохранять. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 20:27 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev, Если смешивает то дурак ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 20:28 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev O_79_O , я правильно понимаю, что ты смешиваешь IDENTITY & SEQUENCE в одном проекте? Не думаю что это хорошая идея. Когда ты вызываешь save(), то по завершению этого метода Hibernate обязан выдать сущности ID. В случае SEQUENCE все норм - мы просто берем следующую цифру, назначаем ее сущности и возвращаем. При этом никаких запросов в БД не уходит. А в случае IDENTITY порядок другой - ID назначает СУБД, поэтому ORM'у приходится делать сразу же INSERT. Мне кажется эту проблему никак не обойти кроме как сначала сохранять А без B, делать flush(), а затем проставлять коллекцию и снова сохранять. Стасян это тесты - в проекте пока все Identity и моя задача как раз все это снести ,заменив на sequence догадайся почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 21:10 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
сейчас я смотрел на то как хибер будет сохранять две сущности связанные 1 ко многим,если у базовой секвенс а у списка идентити в итоге получилось что и ожидалось хибер батчем записал все что секвенс и потом построчно все что идентити что далее - я меняю сущности В идентификатор на секвенс ,записываю заново и получаю ровно ту же картину - опять построчная запись,хотя в доках напиисано иное ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 21:16 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
O_79_O, У тебя удивительная способность задавать глупые детские вопросы. Зачем смешивать селедку с молоком? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 21:19 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev, смотри статистику сейчас я поменял все на секвенс и таблица А и таблица Б имеют секвенс генератор в тот же самый момент при апдейте таблицы B Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
я получаю вот такую стату Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
где мы видем что вместо 5 батчей( батч сайз настроен на 500) у нас произошло 2500 запросов и потом 5 батчей и тут возникает вопрос откуда братец 2500 построчных запросов то - ведь уже идентификторы все sequnce ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 21:32 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
O_79_O где мы видем что вместо 5 батчей( батч сайз настроен на 500) у нас произошло 2500 запросов и потом 5 батчей Опять что-то пытаешься "оптимизировать"? у тебя статистика вместе и на select и на update, подумай каким образом хибер будет собирать граф, если у тебя: B -> A -> B[] и у всех при этом fetch = FetchType.EAGER? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 21:55 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
мышь плачет, но продолжает есть кактус... НО! есть прогресс - выкладывает ddl.... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 21:55 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
вадя, Первый вопрос про сиквенс уже решили))) Съехал на вопрос - почему много запросов))) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 22:00 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
Андрей Панфилов O_79_O где мы видем что вместо 5 батчей( батч сайз настроен на 500) у нас произошло 2500 запросов и потом 5 батчей Опять что-то пытаешься "оптимизировать"? у тебя статистика вместе и на select и на update, подумай каким образом хибер будет собирать граф, если у тебя: B -> A -> B[] и у всех при этом fetch = FetchType.EAGER? тоесть при апдейте B хибер лезет в А потом опять в В? выход какой или лейзи инициализация или ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 22:45 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
O_79_O, ОРМ для CRUD, оптимизатор)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 23:06 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
Андрей Панфилов O_79_O где мы видем что вместо 5 батчей( батч сайз настроен на 500) у нас произошло 2500 запросов и потом 5 батчей Опять что-то пытаешься "оптимизировать"? у тебя статистика вместе и на select и на update, подумай каким образом хибер будет собирать граф, если у тебя: B -> A -> B[] и у всех при этом fetch = FetchType.EAGER? сделал LAZY сделал апдейт таблицы B статистика ровно таже самая Код: plsql 1. 2. 3. 4. 5.
щас включу логи хибера посмотрю что эта с**а селектит то 100 раз ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 23:27 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
O_79_O, похоже на то ,что при saveAll() хибер чекает каждый элемент на наличие в базе путем селекта обычного - гениально б ля ,и после этого делает батч апдейт/инсерт тоесть в любом случае ,какой бы не был идентификатор хибер будет делать тоже количество селектов,что и количество элементов в вашем списке - это какой то лютый пиз дец - неужели нельзя было реализовать это как то по другому ,чем делать хренову тонну селектов то ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 23:42 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
при апдейте хибер генерит вот такие запросы Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
следом за ними идет пачка вот таких Код: plsql 1. 2. 3. 4. 5. 6. 7.
запросов типа селект 11 запросов типа update 5 при этом в таблице находится 10 записей) что происходит я честно не очень понимаю ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2021, 23:51 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
O_79_O что происходит я честно не очень понимаю Да ладно, хибернейт же лучшее изобретение человечества? или уже нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 02:12 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
забыл ник,интересно к чему тут твой бесполезный коментарий) пс.Вообщем выяснил что при генерации id по стратегии sequence хибер будет каждый раз делать селект в этот самый секвенс при вставке строчки Лечится это инкрементом на 50 хотя бы,тогда время вставки вырастает пропорционально в 50 раз ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 11:19 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
O_79_O забыл ник,интересно к чему тут твой бесполезный коментарий) пс.Вообщем выяснил что при генерации id по стратегии sequence хибер будет каждый раз делать селект в этот самый секвенс при вставке строчки Лечится это инкрементом на 50 хотя бы,тогда время вставки вырастает пропорционально в 50 раз Потому что все должно идти от таблиц. Хибернейт неплох для простых админок CRUD где не сильно много связей между сущностями. Щаг влево-вправо и начинается возня, типичным примером является твой вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 11:25 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
PetroNotC Sharp O_79_O, Код дай. А не рассказом как ты его писал. тебе сюда вход воспрещен. не понятно чтоле из названия? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 11:34 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
забыл ник O_79_O забыл ник,интересно к чему тут твой бесполезный коментарий) пс.Вообщем выяснил что при генерации id по стратегии sequence хибер будет каждый раз делать селект в этот самый секвенс при вставке строчки Лечится это инкрементом на 50 хотя бы,тогда время вставки вырастает пропорционально в 50 раз Потому что все должно идти от таблиц. Хибернейт неплох для простых админок CRUD где не сильно много связей между сущностями. Щаг влево-вправо и начинается возня, типичным примером является твой вопрос. давай по пунктам сейчас мы разбирам не связи между таблицами,а то ,почему хибернейт генерирует те или иные запросы со вставкой я разобрался - хибер делает селекты в секвенс и берет оттуда значение - с этим все норм и лечится это увеличением шага инкремента до дефолтных для хибера 50 сейчас у меня второй вопрос при попытке апдейта некоего количества запиисей в бд происходит не совсем для меня понятный процесс а имеено хибернейт и так уже имея список перстистеных сущностей зачем то опять идет в базу и достает их оттуда построчно и потом так же построчно апдейтит ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 11:42 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
andreykaT, А тебе? Ты же два слова связать не можешь. Обычно троечники возмущаются отличниками) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 11:44 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
PetroNotC Sharp andreykaT, А тебе? Ты же два слова связать не можешь. Обычно троечники возмущаются отличниками) а мне не сказали. читай заголовки в следующий раз внимательнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 11:48 |
|
Реквестируем отличников по Хибернейт в тред,петро и ваде вход воспрещен)
|
|||
---|---|---|---|
#18+
O_79_O, >имея список перстистеных сущностей зачем то опять идет в базу и достает их оттуда построчно и потом так же построчно апдейтит = А) проверить версию в бд сучности Б) хибер не имеет список при коротких транзакциях. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2021, 11:48 |
|
|
start [/forum/topic.php?fid=59&msg=40084954&tid=2120389]: |
0ms |
get settings: |
23ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
607ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 713ms |
0 / 0 |