|
|
|
hibernate. как в отношении многие-ко-многим настроить каскад между крайней таблицей и пром
|
|||
|---|---|---|---|
|
#18+
Есть отношение препод - студент многие ко многим. соответственно в базе 3 таблицы препод препод_студент студент Если что, препод - owner. Вопрос - как настроить маппинг так, чтобы при удалении студента - все его упоминания из промежуточной таблицы удалялись, НО преподы не удалялись из базы? Если сделать каскад remove у студента - преподы тоже удаляются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2013, 12:37:44 |
|
||
|
hibernate. как в отношении многие-ко-многим настроить каскад между крайней таблицей и пром
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2013, 13:07:48 |
|
||
|
hibernate. как в отношении многие-ко-многим настроить каскад между крайней таблицей и пром
|
|||
|---|---|---|---|
|
#18+
cdtyjv, Из прочитанного понял(и проверил), что со стороны owner это работает... а можно это как - то с двух сторон сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2013, 13:16:23 |
|
||
|
hibernate. как в отношении многие-ко-многим настроить каскад между крайней таблицей и пром
|
|||
|---|---|---|---|
|
#18+
Скорее всего, в данном сценарии каскады не нужны Вот рекомендации из раздела Transitive persistence документации • It does not usually make sense to enable cascade on a many-to-one or many-to-many association. In fact the @ManyToOne and @ManyToMany don't even offer a orphanRemoval attribute. Cascading is often useful for one-to-one and one-to-many associations. • If the child object's lifespan is bounded by the lifespan of the parent object, make it a life cycle object by specifying cascade="all,deleteorphan"(@OneToMany(cascade=CascadeType.ALL, orphanRemoval=true)). • Otherwise, you might not need cascade at all. But if you think that you will often be working with the parent and children together in the same transaction, and you want to save yourself some typing, consider using cascade="persist,merge,save-update". То есть, если редактируя преподавателя, нужно не только "подключать", но и редактировать и создавать студентов, то со стороны преподавателя понадобится PERSISTS, MERGE. А если просто подключать/отключать студентов (которых редактируют где-то в другом месте), то каскады не нужны. Со стороны студента каскады не нужны. Я лично предпочитаю для ManyToMany каскады не использовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2013, 13:23:17 |
|
||
|
hibernate. как в отношении многие-ко-многим настроить каскад между крайней таблицей и пром
|
|||
|---|---|---|---|
|
#18+
ivanra, а если мне с любой стороны надо так: при удалении студента/препода удалялся студент/препод и данные из промежуточной таблицы. просто у меня сейчас так: Если удалять препода, то всё работает так, как я и хочу, а со стороны студенты вываливается эксепшн о том, что Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Конфликт инструкции DELETE с ограничением REFERENCE Код: java 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. 30. 31. 32. 33. 34. 35. 36. 37. Код: 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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2013, 13:29:55 |
|
||
|
hibernate. как в отношении многие-ко-многим настроить каскад между крайней таблицей и пром
|
|||
|---|---|---|---|
|
#18+
redwhite90а можно это как - то с двух сторон сделать? какой в этом смысл? Академический? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2013, 13:43:33 |
|
||
|
hibernate. как в отношении многие-ко-многим настроить каскад между крайней таблицей и пром
|
|||
|---|---|---|---|
|
#18+
redwhite90, это известная особенность хибернейта: действия с коллекцией с инверсной стороны игнорируются. даже если написать Код: java 1. - ничего не произойдет, пока с "хозяйской" стороны не будет зеркального удаления. Приходится это учитывать и дублироваить с 2 сторон, чтобы наверняка. Как выариант - добавить серверный каскад на удаление, либо SQLQuery c delete-ом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2013, 14:05:15 |
|
||
|
hibernate. как в отношении многие-ко-многим настроить каскад между крайней таблицей и пром
|
|||
|---|---|---|---|
|
#18+
Petro123redwhite90а можно это как - то с двух сторон сделать? какой в этом смысл? Академический? это удобно имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2013, 15:07:51 |
|
||
|
hibernate. как в отношении многие-ко-многим настроить каскад между крайней таблицей и пром
|
|||
|---|---|---|---|
|
#18+
ivanraredwhite90, это известная особенность хибернейта: действия с коллекцией с инверсной стороны игнорируются. даже если написать Код: java 1. - ничего не произойдет, пока с "хозяйской" стороны не будет зеркального удаления. Приходится это учитывать и дублироваить с 2 сторон, чтобы наверняка. Как выариант - добавить серверный каскад на удаление, либо SQLQuery c delete-ом под серверным каскадом понимаете залезть руками на базу и добавить каскад? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2013, 15:09:27 |
|
||
|
hibernate. как в отношении многие-ко-многим настроить каскад между крайней таблицей и пром
|
|||
|---|---|---|---|
|
#18+
redwhite90, да, если sql сервер поддерживает каскадное удаление, то на таблицу связей на внешние ключи можно добавить ON DELETE CASCADE. Это то место, где hbm2ddl из-за своей универсальности ничего сделать не может. Еще в хибернейте есть аннотация @Cascade, но для many-to-many она не работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2013, 15:37:18 |
|
||
|
hibernate. как в отношении многие-ко-многим настроить каскад между крайней таблицей и пром
|
|||
|---|---|---|---|
|
#18+
ivanraда, если sql сервер поддерживает каскадное удаление, то на таблицу связей на внешние ключи можно добавить ON DELETE CASCADE. Это то место, где hbm2ddl из-за своей универсальности ничего сделать не может. И как обнавлять кеш второго уровня, когда каскад на уровне базы срабатывает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2013, 15:41:24 |
|
||
|
hibernate. как в отношении многие-ко-многим настроить каскад между крайней таблицей и пром
|
|||
|---|---|---|---|
|
#18+
ivanraredwhite90, да, если sql сервер поддерживает каскадное удаление, то на таблицу связей на внешние ключи можно добавить ON DELETE CASCADE. Это то место, где hbm2ddl из-за своей универсальности ничего сделать не может. Еще в хибернейте есть аннотация @Cascade, но для many-to-many она не работает Ок. буду знать. Я думал хибернейт такое должен уметь) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2013, 16:23:23 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38408560&tid=2128535]: |
0ms |
get settings: |
11ms |
get forum list: |
22ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
36ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
76ms |
get tp. blocked users: |
2ms |
| others: | 315ms |
| total: | 488ms |

| 0 / 0 |
