|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
Всем привет! Подскажите пожалуйста, есть две энтити связаны друг с другом @OneToMany и @ManyToOne соответственно. Когда через REST запрос выполняется операция DELETE удаляются обе записи в двух таблицах. Какая настройка может сделать так чтобы запись удалялась в одном месте а не тянула все остальные связи??? Вот что делаю: Код: delete 1.
НАСТРОЙКИ: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Код: java 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2019, 02:14 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
Dr.Hofmann Код: java 1. 2. 3.
как вы думаете, что скрывается под CascadeType.ALL? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2019, 04:06 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
Dr.Hofmann, Какая настройка может сделать так чтобы запись удалялась в одном месте а не тянула все остальные связи??? Ответили выше, только есть мнение, что Вы не понимаете, что делаете. Консистентность данных Вас совсем не волнует? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2019, 10:36 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
каскадинг это вообще опасная штука. там одним делетом можно удалить половину базы (или всю) и вообще многие не рекомендуют юзать каскадинг. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2019, 11:56 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
andreykaT, Смотря где. Если у вас таблица города и таблица улицы, то почему нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2019, 12:05 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
Код: java 1. 2. 3.
Если я убираю cascade=CascadeType.ALL - то у меня вообще не удаляются данные из таблицы product. Как у вас настроено? Это обычный спринг, не spring boot. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2019, 12:26 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
авторDr.Hofmann, Консистентность данных Вас совсем не волнует? Удалили продукт в категории продуктов который был связан с конкретной категорией из другой таблицы, может такое быть на практике ? Наверное да, Где здесь проблема с консистентностью? Волнует поэтому задаю здесь вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2019, 12:37 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
Petro123andreykaT, Смотря где. Если у вас таблица города и таблица улицы, то почему нет? за всем не уследишь :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2019, 12:42 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
Dr.HofmannавторDr.Hofmann, Консистентность данных Вас совсем не волнует? Удалили продукт в категории продуктов который был связан с конкретной категорией из другой таблицы, может такое быть на практике ? Наверное да, Где здесь проблема с консистентностью? Волнует поэтому задаю здесь вопрос. а ты как удаляешь? попробуй вначале в продукте убрать категорию а потом делет делай. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2019, 12:43 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
shadenDr.Hofmann, Какая настройка может сделать так чтобы запись удалялась в одном месте а не тянула все остальные связи??? Ответили выше, только есть мнение, что Вы не понимаете, что делаете. Консистентность данных Вас совсем не волнует? причем тут консистентность данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2019, 12:44 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
Dr.HofmannЕсли я убираю cascade=CascadeType.ALL - то у меня вообще не удаляются данные из таблицы product. Во первых - есть очевидное непонимание работы софта "под капотом". Во вторых - при отсутствии понимания можно и не такие фокусы получать. В общем совет один - зубрить. То есть читать доки и разглядывать кучу примеров из сети. Читаем сначала про хибер, конкретно про маппинг объектов на таблицы, про все его виды, про общие принципы. Потом (если наступит понимание) читаем про каскадирование, сначала понимаем, что это такое, потом как оно работает. И только после понимания указанных пунктов лезем грязными руками в код и меняем его на правильный, возможно при этом меняя и аннотации. Обращаем внимание на наличие спринга, который так же от неумения и непонимания может внести свою лепту в появление кучи косяков. На остальные вопросы - как найти доки рассказывать? Гуглить научить? Может ещё и что такое гугл рассказать? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2019, 12:48 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
а че в двух словах сказать почему так вместо этого абзаца из ленинской энциклопедии? ) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2019, 12:52 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
andreykaTPetro123andreykaT, Смотря где. Если у вас таблица города и таблица улицы, то почему нет? за всем не уследишь :) чтобы не следить и придумали каскад. Только нужно понимать, что при справочнике городов - города не удаляются. А вот при Округ --> города удаляются. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2019, 13:17 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
автора ты как удаляешь? попробуй вначале в продукте убрать категорию а потом делет делай. Зачем категорию удалять если она связана с другими продуктами ??? или вы это предлагаете делать? авторCategory category = null; product.setCategory(category); productRepository.delete(product); авторНа остальные вопросы - как найти доки рассказывать? Гуглить научить? Может ещё и что такое гугл рассказать? Гуглил но не нашел еще работающих вариантов. авторВо первых - есть очевидное непонимание работы софта "под капотом". SPRING 5 / TOMCAT 9 / JACKSON-DATABIND / spring-data-jpa 2.1.5 / persistence-api 1.0.2 / Hibernate-core 5.4.1 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2019, 13:26 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
почти ) product.setCategory(null) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2019, 13:36 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
я кстати что то такое помню сталкивался несколько раз что у тебя есть поле с фк на другую сущность и после этого оно делетом не хотело удаляться но чот как то решали не помню как. а вообще, удалять прям удалять из базы это как правило, не очень, обычно просто помечают запись удаленной. а не физически ее вытирают. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2019, 13:41 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
andreykaTя кстати что то такое помню сталкивался несколько раз что у тебя есть поле с фк на другую сущность и после этого оно делетом не хотело удаляться но чот как то решали не помню как. а вообще, удалять прям удалять из базы это как правило, не очень, обычно просто помечают запись удаленной. а не физически ее вытирают. -1 FK - это справочная таблица. Из нее никогда не удаляют каскадом. Полное непонимание работы СУБД, FK, PK и направление связей. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2019, 14:03 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
а кто говорит про каскад? чел хочет удалить просто сущность, внутри которой ссылка на другую сущность вот и всё. зачем вы всё усложняете? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2019, 14:07 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
andreykaTа кто говорит про каскад? чел хочет удалить просто сущность, внутри которой ссылка на другую сущность вот и всё. зачем вы всё усложняете?я говорю в каких примерах каскад применяется и в каких НЕ применяется. Ты только про одно - никогда не применять. Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2019, 14:10 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
я подразумевал что его избегать вовсе, либо применять с осторожностью. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2019, 14:13 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
andreykaT, согласен) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2019, 14:19 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
Dr.Hofmann Код: java 1. 2. 3.
Если я убираю cascade=CascadeType.ALL - то у меня вообще не удаляются данные из таблицы product. Как у вас настроено? Это обычный спринг, не spring boot.Ну вот тут потенциально две беды: - у вас транзакция активна или нет? без активной транзакции у хибера поведение непредсказуемое - объявления @OneToMany в родителе в основном нужно для того, чтобы можно было писать запросы с использованием Criteria API: 21836555 , а вы все это дело еще обильно cascade сдобрили, теперь смотрите что получается: вот у вас есть запрос к продукту, в нем стоит eager fetch категории, хибер ее вытягивает после того как вытянул продукт (ну или вместе одним запросом, зависит от того как тянете), дальше он видит что у категории eager fetch на продукты - он их тоже начинает тянуть и прилепливает к категории (ага, получили дополнительные тормоза). Вопрос: вы когда продукт удаляете, теперь то, что нафетчилось в категорию, находится в каком состоянии и как эту категорию сохранять? Согласно спецификации JPA ваш удаленный продукт удалять не нужно если на него или категорию (потому что у вас такой cascade) прилетел persist: 3.2.2 Persisting an Entity Instance- If X is a removed entity, it becomes managed. - For all entities Y referenced by a relationship from X, if the relationship to Y has been annotated with the cascade element value cascade=PERSIST or cascade=ALL, the persist operation is applied to Y. а прилетает в категорию persist или нет - хз, тут уже вам виднее. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2019, 04:56 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
Андрей Панфилова прилетает в категорию persist или нет - хз, тут уже вам виднее. Вообще корень зол здесь в том, что хибер полез в дебри и занялся транзакциями, начал делить на managed и прочих, ну и всё в таком духе. Банально не разделены те задачи, которые должны быть разделены, а в результате куча молодняка не может разобраться со всей этой ахинеей. Нормальный ORM отделяет чистые операции с данными от сервисных, типа транзакций и прочего кэширования. А хибер исторически погряз в смешении сущностей, ну и молодняк на этом практически всегда виснет, как и показывает пример в данной теме. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2019, 11:10 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
alex55555Вообще корень зол здесь в том, что хибер полез в дебри и занялся транзакциями, начал делить на managed и прочих, ну и всё в таком духе. Банально не разделены те задачи, которые должны быть разделены, а в результате куча молодняка не может разобраться со всей этой ахинеей. Нормальный ORM отделяет чистые операции с данными от сервисных, типа транзакций и прочего кэширования. А хибер исторически погряз в смешении сущностей, ну и молодняк на этом практически всегда виснет, как и показывает пример в данной теме.Корень зла вы ищете не там. В конкретном случае ТС не чтит спецификацию (то что спецификация написана через одно место и в хибере (IDE не подсвечивает) не написано как делать нельзя - это другой совсем вопрос). Основная беда в том, что в опенсорс идут индивидуумы, в большинстве своем желающие потешить свое ЧСВ, типа в опенсорсе нет всяких спринтов, дедлайнов, менеджеров и пр., вообщем всего того, что присуще коммерческой разработке, в результате чего на выходе получаем то, что получаем. Ну вот посмотрите чейнджлог последнего релиза жава: новый GC, JMH и новый синтаксис switch - какой-то трешак: от JMH мне ни холодно, ни жарко, и вообще чет не представляю где оно мне может пригодиться, существование годного профайлера было бы в 100 раз полезнее; новый GC - остальные 7 шт (уже счет потерял) оказались говном чтоли? И так везде. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2019, 13:34 |
|
Spring JPA настройка Entity
|
|||
---|---|---|---|
#18+
Вообщем, остановился на следующей настройки убрал cascade=CascadeType.ALL из Product, далее установил следующую закономерность что запись из Product удаляется методом crudRepository.delete(product) отправляя product через DELETE /category/{id}/product и он удаляется. До этого использовал deleteById(Long productId) почему-то именно у меня этот метод не работает(только на чистом спринге не SpringBoot). Или чтоб с {id} нужно извращаться получать findById(productId) product, и его уже удалять вторым этапом. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2019, 15:17 |
|
|
start [/forum/topic.php?fid=59&msg=39790571&tid=2121410]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 372ms |
total: | 529ms |
0 / 0 |