![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| NiUb |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.7.2009 Репутация: нет Всего: нет |
Здравствуйте,
Я столкнулся с такой проблемой, у меня есть объект Product, в нем есть ArrayList объектов Features, промэпленный как @OneToMany(fetch = FetchType.EAGER,cascade = CascadeType.ALL ),Объект Feature c Product никак не связан, то есть связь однонаправленная Хибернайт создаёт таблицу ассоциаций product_feature в которой сопоставляет праймари ключи из обеих таблиц При сохранении путём
Всё сохраняется нормально, но при апдейте данных путём
Возникает следующая проблема - коллекция Features в таблице Features переписывается заново, то есть если в Features были такие днные: 1 2 3 4 , то при добавлении к Fetures нового элемента (пусть будет 5) и апдейта Product в базе теперь будет 1 2 3 4 1 2 3 4 5 , то есть данные чего то дублируются Если вместо 4 вписать 5 и проардейтить Product то в таблице будет 1 2 3 4 1 2 3 5 При этом в таблице соответствий (product_feature) каждый раз при апдейте одному и тому же уже сохранённому Product ставится в соответствие новая коллекция Почему так происходит? Помогите,пожалуйста, разобраться Заранее благодарен за помощь |
||||
|
|||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 8 Всего: 118 |
Объекты никак не связаны - это как-то непонятно. Лучше тогда уж код привести. И таблицы.
|
|||
|
||||
| afon |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 5.4.2008 Где: Украина, Киев Репутация: нет Всего: 1 |
А как вы получается список Features у продукта?
СКорее всего нужно делать не просто product.setFeatures(List<Features>) а вот так: product.getFeatures().add(feature) Второй вариант, отсутствие обратной связи. Третий вариант, работайте со списком Features безотносительно родителя Product, они же у вас ничего о свеом продукте не знают. List<Features> featuresOfProduct = product.getFeatures(); Теперь работаем с фичами с каждой по отдельности. Кого-то убили, кого-то созранили путем feature.setProduct(product), getHT().save(feature, feature.getClass()). В следующий раз, когда вы подтянете свой product.getFeatures() - новые фичи будут в списке, а старых не будет. |
|||
|
||||
| NiUb |
|
||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.7.2009 Репутация: нет Всего: нет |
mapping of product
mapping of Feature
Сохраняю
Обновляю
Добавлено через 9 минут и 34 секунды
Product у меня представляет собой command object в модели MVC , List Features заполняется из формы после чего в onSubmit() контроллера вызывается привелдённый выше метод обновления продукта Я бы даже не заметил этой проблемы если бы случайно не полез смотреть базу руками... |
||||||||||
|
|||||||||||
| NiUb |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.7.2009 Репутация: нет Всего: нет |
Table product_feature
Product_id Feature_id 67; 73 67; 74 67; 75 67; 76 Table feature Feature_id Служебные String 69; "222";"222" 70; "222";"222" 71; "222";"222" 72; "222";"222" 73; "222";"222" 74; "222";"222" 75; "222";"222" 76; "222";"222" Сначала я сохранил продукт c id 67 c листом feature c id 69 70 71 72 Затем я просто вызвал getHibernateTemplate().update(product); после чего прежняя коллекция была "отвязана" от моего продукта (но в базе осталась) вместо неё была создана новая - с id 73 74 75 76 т привязана к старому продукту с id 67, что и видно по таблице product_feature |
|||
|
||||
| garbuz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 8 Всего: 11 |
Насколько я понял вы используете Spring MVC.
Покажите метод formBackingObject. Уверены что правильно получаете объект для редактирования? |
|||
|
||||
| NiUb |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.7.2009 Репутация: нет Всего: нет |
Нашёл причину трабла
Каждый раз при обновлении в коде чего то создавалась новая коллекция, нужно было просто чуть глубже капнуть (код не мой поэтому я и не в курсе был) Теперь получаю старую коллекцию и апдейтю её, всё работает Всем СПАСИБО за отклики и советы |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |