|
|
|
hibernate problem @many_to_many
|
|||
|---|---|---|---|
|
#18+
Всем привет. Есть такой вот примерно маппинг: Код: 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. вопроc в следующем: когда я делаю так: Код: java 1. 2. 3. 4. 5. в базе данных в промежуточной таблице появляется запись(всё как надо) если я делаю симметрично: Код: java 1. 2. 3. 4. 5. в базе не появляется ничего. findById реализовано примерно так: Код: java 1. 2. 3. 4. 5. 6. 7. Dao.update так: Код: java 1. 2. 3. 4. Вопрос : почему так и как с этим бороться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2013, 15:29:17 |
|
||
|
hibernate problem @many_to_many
|
|||
|---|---|---|---|
|
#18+
В обоих случаях делаете неправильно. Следует всегда добавлять и сохранять с 2 сторон: Код: java 1. 2. 3. 4. hibernate разберется (в соответсвии с аннотациями) какие запросы сделать, а вот на "клиенте" следует самостоятельно поддержаить целостность данных путем добавления связки в оба списка, поскольку вы имеете дело не с реляционными данными, а с объектами. Это есть в документации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2013, 15:37:51 |
|
||
|
hibernate problem @many_to_many
|
|||
|---|---|---|---|
|
#18+
ivanra, с двух сторон если написать, то пишет что-то про same object P.S. я не сомневаюсь, что в документации всё есть. У меня конкретный вопрос по конкретному маппингу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2013, 15:41:21 |
|
||
|
hibernate problem @many_to_many
|
|||
|---|---|---|---|
|
#18+
ivanraВ обоих случаях делаете неправильно. Следует всегда добавлять и сохранять с 2 сторон: Код: java 1. 2. 3. 4. hibernate разберется (в соответсвии с аннотациями) какие запросы сделать, а вот на "клиенте" следует самостоятельно поддержаить целостность данных путем добавления связки в оба списка, поскольку вы имеете дело не с реляционными данными, а с объектами. Это есть в документации хотя Вы правы - ошибка не в этом. Если использовать ваш код, то всё то же самое примерно. только проблема в том, что когда ссылки ставятся навстречу друг другу, невозможно сериализовать этот объект в xml(у меня на самом деле это rest web service). не знаете как решить эту проблему? ну и вопрос почему всё таки в одну сторону работает, а в другую нет остается открытым ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2013, 15:53:02 |
|
||
|
hibernate problem @many_to_many
|
|||
|---|---|---|---|
|
#18+
Работая с hibernate, прежде всего забудьте про реляционные данные, тут есть только объекты. Поэтому единственно правильное решение Код: java 1. 2. Иначе при сохранении в базу вы получаете непредсказуемый результат. Конечно, тут лучше иметь меппинг не в List а в Set, но если так нужен List, то к указанным 2 строчкам следует добавить проверку на уже вставленного значения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2013, 15:56:27 |
|
||
|
hibernate problem @many_to_many
|
|||
|---|---|---|---|
|
#18+
ivanraРаботая с hibernate, прежде всего забудьте про реляционные данные, тут есть только объекты. Поэтому единственно правильное решение Код: java 1. 2. Иначе при сохранении в базу вы получаете непредсказуемый результат. Конечно, тут лучше иметь меппинг не в List а в Set, но если так нужен List, то к указанным 2 строчкам следует добавить проверку на уже вставленного значения иначе вылетит авторorg.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2013, 16:01:54 |
|
||
|
hibernate problem @many_to_many
|
|||
|---|---|---|---|
|
#18+
redwhite90, Потому что вы одну и ту же сущность инстанциируете два раза. Вместо того чтобы для одной сущности использовать один и тот же объект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2013, 16:03:26 |
|
||
|
hibernate problem @many_to_many
|
|||
|---|---|---|---|
|
#18+
хотя у меня на самом деле set и вылетает такая ошибка, если попытаться дважды выполнить вышеуказанный код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2013, 16:05:54 |
|
||
|
hibernate problem @many_to_many
|
|||
|---|---|---|---|
|
#18+
Blazkowiczredwhite90, Потому что вы одну и ту же сущность инстанциируете два раза. Вместо того чтобы для одной сущности использовать один и тот же объект. а в каком месте я это делаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2013, 16:10:48 |
|
||
|
hibernate problem @many_to_many
|
|||
|---|---|---|---|
|
#18+
redwhite90а в каком месте я это делаю? Без понятия. Преведенный выше код лишь не точная проекция вашего кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2013, 16:19:03 |
|
||
|
hibernate problem @many_to_many
|
|||
|---|---|---|---|
|
#18+
redwhite90только проблема в том, что когда ссылки ставятся навстречу друг другу, невозможно сериализовать этот объект в xml(у меня на самом деле это rest web service). не знаете как решить эту проблему? ну и вопрос почему всё таки в одну сторону работает, а в другую нет остается открытым С сериализацией в XML разобраться просто: надо поставить соответствующую jaxb аннотацию, чтобы обратная связь не сериализовалась. А в целом, в many-to-many мэппинге есть основная и инверсная сторона, кто из них кто видно из аннотаций (или из меппинг-файла). Связь будет сохраняться в базу при сохранении основной стороны и не будет сохраняться при сохранении инверсной стороны - так работает hibernate. Поэтому эти знания в принципе можно использовать для того, чтобы убедиться, что данные сохранились. Но результат в целом непредсказуемый: в один прекрасный момент метаданные меняются - и ваша программа перестает работать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2013, 16:29:19 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38342411&tid=2128931]: |
0ms |
get settings: |
13ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
34ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 284ms |
| total: | 403ms |

| 0 / 0 |
