![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Sun |
|
||||||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 2 Всего: 48 |
Есть проблема следующего характера. Есть две сущности Order и Contact. Между ними связь ManyToOne. Но связь не жесткая. То-есть существующий контакт может быть добавлен к заказу в любой момент времени.
Однако при попытке назначить один и тот-же контакт другому заказу идет ошибка, по поводу того что нельзя изменить парента.
Нашел статью где описано использование алиасов http://gae-java-persistence.blogspot.com/2...bout-joins.html
При связывании первого заказа с первым контактом все хорошо. Но когда другой заказ привязываешь к тому же контакту - сохраняется без ошибок, но при вытаскивании объекта заказа поле контакта имеет значение null. Кто сталкивался с подобной проблемой? Может есть какие-то соображения? Это сообщение отредактировал(а) Sun - 14.9.2011, 17:41 -------------------- Account removed |
||||||
|
|||||||
| Farmazon |
|
|||
![]() Разработчик ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 7.7.2006 Репутация: 3 Всего: 5 |
Кэш чистил?
-------------------- Таково моё общее мнение. |
|||
|
||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 2 Всего: 48 |
Да, по колесам стучал. Багажник открывал - закрывал - не помогало.
-------------------- Account removed |
|||
|
||||
| Farmazon |
|
|||
![]() Разработчик ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 7.7.2006 Репутация: 3 Всего: 5 |
Добавлено через 1 минуту и 11 секунд ну примерно так должна разметка выглядеть для двусторонней связи.... -------------------- Таково моё общее мнение. |
|||
|
||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 2 Всего: 48 |
Мне не нужна двухсторонняя связь. Мне нужна возможность привязывать один и тотже контакт к неограниченному числу заказов, в любой момент времени. А потом иметь возможность вытянуть контакт из сохраненного заказа. Вот такое простое желание. Это сообщение отредактировал(а) Sun - 14.9.2011, 17:29 -------------------- Account removed |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15719 Регистрация: 24.3.2004 Где: Dublin Репутация: 5 Всего: 538 |
Так второе не противоречит первому Покажи как у тебя сделан маппинг на обоих сторонах. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Farmazon |
|
|||
![]() Разработчик ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 7.7.2006 Репутация: 3 Всего: 5 |
чёт я правда не внимателен...
нужно больше кода. Добавлено через 42 секунды в базе-то сохраняется?... -------------------- Таково моё общее мнение. |
|||
|
||||
| Sun |
|
||||||||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 2 Всего: 48 |
Маппинг только на одной стороне - в заказе. Потому что контакт - универсальный объект и может линковаться не только к заказу но и к другим сущностям. Поэтому у контакта нет мапинга на заказ:
а сохранение выглядит так:
Первый заказ и первый контакт сохраняется и достается из базы прекрасно. При попытке сохранить второй заказ с тем же контактом идет ошибка:
Это сообщение отредактировал(а) Sun - 15.9.2011, 09:13 -------------------- Account removed |
||||||||
|
|||||||||
| Sun |
|
||||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 2 Всего: 48 |
Пришлось делать очень грязный хак.
Но это работает! Ничего лучше придумать не вышло. Это сообщение отредактировал(а) Sun - 15.9.2011, 09:27 -------------------- Account removed |
||||
|
|||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15719 Регистрация: 24.3.2004 Где: Dublin Репутация: 5 Всего: 538 |
Попробуй указать @JoinColumn.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Sun |
|
||||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 2 Всего: 48 |
Не идет. Получаю туже ошибку:
-------------------- Account removed |
||||
|
|||||
| LSD |
|
||||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15719 Регистрация: 24.3.2004 Где: Dublin Репутация: 5 Всего: 538 |
Вот так у меня все заработало:
База H2, Persistence Provider - Hibernate. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||||
|
|||||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 2 Всего: 48 |
К сожалению я не могу использовать Hibernate с AppEngine. Datastorage используемый в AppEngine имеет ряд ограничений, в силу того что используется не реляционная СУБД, а так называемый Bigtable. У меня изначально реализация была на Hibernate с использованием MySQL. Там никаких проблем не было со связями. Я спокойно джойнил любые объекты, не особо задумываясь. Но тут такие фокусы не проходят. Всё равно спасибо! -------------------- Account removed |
|||
|
||||
| Farmazon |
|
|||
![]() Разработчик ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 7.7.2006 Репутация: 3 Всего: 5 |
Вот с этого и надо было начинать!11
-------------------- Таково моё общее мнение. |
|||
|
||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 2 Всего: 48 |
У меня в заголовке темы написано что я использую JPA с AppEngine. Когда создавал тему не подозревал о наличии подобных ограничений. Надеялся что кто-то сталкивался с подобной проблемой. Но похоже что нет. Может спрошу у разработчиков - вдруг что подскажут получше, чем я сделал. -------------------- Account removed |
|||
|
||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 2 Всего: 48 |
Почитал еще по форумам. Пишут что единственная возможность работать с unowned relation, это собственно иметь в объекте ключ или список ключей, а не ссылки на сам объект. Связано это с тем что если между объектами существует связь, они сохраняются в одной так называемой entity group, в виде связки parent-child. Если же объект был сохранен в отдельной транзакции - у него будет другая entity group. А установить отношения между разными entity group нельзя. Это связанно с архитектурными особенностями, так как разные entity group могут храниться в разных дата-центрах. Поэтому приходится менеджить эти связи вручную, используя сохраненные ключи. Ключи сохраняются как простой тип @Basic, что позволяет добавлять и удалять их в любой момент времени.
-------------------- Account removed |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15719 Регистрация: 24.3.2004 Где: Dublin Репутация: 5 Всего: 538 |
А JDO ты не смотрел? Может там это можно реализовать?
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 2 Всего: 48 |
Это не зависит от того что использовать - JDO или JPA. Проблема в самом способе хранения данных - в этих самых entity group. Везде собственно предлагают сохранять ключи, как воркэраунд. -------------------- Account removed |
|||
|
||||
| Farmazon |
|
|||
![]() Разработчик ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 7.7.2006 Репутация: 3 Всего: 5 |
так и делают, вроде как.. В той же кочке или редиске. Ну да, это нарушает ссылочную целостность, но что поделаешь? Зато работает шустро с большими объёмами.
Там наверное и транзакций в том виде, что есть в RDBMS, нету... Это сообщение отредактировал(а) Farmazon - 20.9.2011, 13:31 -------------------- Таково моё общее мнение. |
|||
|
||||
![]()
|
| Правила форума "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. |