| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > JPA обновление OneToMany коллекций |
| Автор: dm3q3k 12.6.2010, 13:07 | ||||||||
| Здравствуйте! Прошу помочь разобраться Имеется следующий код
Данные (decision) успешно сохраняются в базу. Но если где-то далее по коду взять объект Organization и посмотреть связанную с ним коллекцию Decision, то получаю старый список, без добавленных новых объектов. Получение объекта Organization и просмотр списка Decision
Класс Organization
Класс Decision
|
| Автор: ki6opr 14.6.2010, 02:56 |
| может я конечно туплю, но разве не нужно сделать еще и вот так ? organization.getDecisionList.add(decision) |
| Автор: dm3q3k 14.6.2010, 08:31 |
| может я конечно тоже туплю, но какой тогда смысл использовать JPA? Просто organization.getDecisionList().add(decision) ничего не даст, нужно еще em.merge(organization) делать. А если у меня какой-то очень сложный объект, с большим количеством связей, мне для каждой связи делать getList().add(...) а потом еще и merge. |
| Автор: ki6opr 15.6.2010, 07:23 |
| только сейчас заметил а где Каскадность у Decision.organization ? по умолчанию вообще то никаких действий производится не будет |
| Автор: dm3q3k 15.6.2010, 09:26 | ||
а какая каскадность должна быть. Ставил CascadeType.ALL, так он мне новую организацию создает, а не обновляет коллекцию у старой |
| Автор: ki6opr 16.6.2010, 02:56 | ||||
а PersistentContext в JPAFacade типа Extended ? |
| Автор: dm3q3k 16.6.2010, 10:04 | ||||
JpaFacade, type не указан, видимо по умолчанию
persistence.xml
|
| Автор: dm3q3k 16.6.2010, 12:47 | ||
а что даст тип Extended? Если не затруднит, поясните пожалуйста |
| Автор: ki6opr 17.6.2010, 02:27 |
| да тут нужно тип Extended использовать, различие в том что если используешь PersistentContext.Extended сущности всегда находятся в контексте пока ты сам вручную не сделаешь detach (тоесть JPA знает новая ли это сущность, либо она измененая). в случае обычного контекста у тебя сущность приходит в состоянии detached и сначала нужно сделать merge который изменит состояние либо на new для новой либо на merged для существующей энтити. собственно в джавадоках это все описано у тебя получается что сушности приходят detached потом ты делаешь персист и машина просто создает новые вместо того что бы обновить Organization. измени тип контекста на Extended и добавь в анотацию ManyToOne каскадность. |
| Автор: dm3q3k 18.6.2010, 07:23 |
| Спасибо за разъяснение. А какие могут быть проблемы при использовании Extended? Ну то есть плюсы для себя я увидел, но , возможно есть какие-то подводные камни? |