![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
greef |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 10.10.2007 Репутация: нет Всего: нет |
Не могу найти ошибку в след коде. Цель: получив id объектов извне (по этим id можно найти объекты), засунуть потом эти объекты в List.
cc.getViewuser().getFriendlist() - массив id-ков приходящий извне. Те тут будет 1, 4, 15 etc cc.getViewuser().getFriendlist().get(i); - тут получаю эти id-ники listFreinds.add(userManager.getUser(idFriend)); - а тут заполняю listFreinds объектами класса User имеющие id: 1, 4, 15 etc |
|||
|
||||
Kangaroo |
|
|||
![]() AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 21 Всего: 104 |
greef,
а какая ошибка? Случайно не ArrayOutOfBound иксепшн? -------------------- Lost.... |
|||
|
||||
v2v |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1620 Регистрация: 20.9.2006 Где: Киев Репутация: 8 Всего: 56 |
|| \/
? |
|||
|
||||
greef |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 10.10.2007 Репутация: нет Всего: нет |
Да, спасибо. Ошибка ArrayOutOfBound, а решением было
Только теперь ошибок нет. Но сохранение друзей не происходит. Хотя остальные поля объекта сохраняются успешно.
Те изменения в поле Name и тд, сохраняются успешно. А listFreinds нет. Может проблему в маппинге?
Модель User
Добавлено через 9 минут и 44 секунды Поспешил с вопросом ![]() inverse="true" убрал и все сохраняется. Вот тут вопрос. Какое значени и в каких случаях надо использовать 1) inverse="true" 2) cascade="all" Документация не дала полного ответа. Заранее спасибо |
||||||||
|
|||||||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Документация даёт полный ответ, просто надо её повнимательней читать ![]() Параметр inverse отвечает за то, по какому объекту будет определяться наличие связи между двумя сущностями. Пусть есть сущность А и Б, если у сущности А выставить параметр inverse в false, то наличие ссылки в А на Б будет означать, что связь есть (и сохранять её в базу). Если у А выставить inverse в true, то наличие связи будет определяться по Б. Параметр cascade определяет какие операции будут применяться и к связанным сущностям. Если стоит "all", то все операции (сохранение, загрузка, удаление и т.п.) будут применяться и к связанным сущностям. -------------------- 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. |
|||
|
||||
greef |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 10.10.2007 Репутация: нет Всего: нет |
LSD Спасибо.
Есть еще вопрос по коллекции.
Я должен добавить в список друзей юзеров - выбранного юзера (ourUser), соответственно если он там уже есть его добавлять не надо. Поэтому я перебираю всех юзеров tempUser и просматриваю список друзей этих юзеров tempFriends - если этот список содержит выбранного юзера, то ничего не делаю. Иначе добавляю. Но у меня он добавляются еще и еще - таким образом получаю что в друзьях у юзеров будет повторятся выбранный юзер. |
|||
|
||||
Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Я честно сказать, не сильно уверено, но может быть тебе корректно задать equals и hashCode?
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 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. |
|||
|
||||
greef |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 10.10.2007 Репутация: нет Всего: нет |
Есть список людей. У каждого есть друзья.
Вот я беру одного человека. И в список его друзей могу кого-то добавить (из имеющихся людей), кого-то удалить (из ранее выбранных друзей). Те работаю со списком друзей для определенного человека. НО если я, например, у Иванова в друзьях был Сидоров. И после изменения я оставил его в друзьях, то он у меня еще раз добавляется хотя по идеи if(!tempFriends.contains(ourUser)) не должно это позволить. |
|||
|
||||
Kangaroo |
|
|||
![]() AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 21 Всего: 104 |
Опять непонятно
![]() И еще, объясните, пожалуйста, смысл этих строчек:
? Зачем его удалять, если потом сразу его же добавлять... -------------------- Lost.... |
|||
|
||||
greef |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 10.10.2007 Репутация: нет Всего: нет |
За это сорри. Просто пробовал разл варианты. Забыл удалить ![]() Хорошо тогда объясню по другому. Проблема - в коллекию добавляется объект даже если он в ней есть. Получается что у Иванова может получится 10 Сидоров в друзьях. Описание - Из view приходит инфа от юзере. Имя, пол, список его друзей (checkbox). В онсабмит я сохраняю изменения. Сначало все поля типа имени, адреса ид (ourUser.setName(cc.getViewuser().getName()); ourUser.setLocation(cc.getViewuser().getLocation());). Потом мне нужно сохранить список друзей - ourUser.setFriendlist(tmpList);. Для этого я и проделываю такую операцию. Если можете посоветовать другой вариант решения проблемы, буду очень благодарен. Привожу пример контролера, модели, маппинга и команд класса. PS Думаю что ошибка именно из-за неправильной работы с коллекциями, хотя может быть что то напутал в маппинге.
Model
Mapping
Command class
|
||||||||||
|
|||||||||||
nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
greef, тебе уже посоветовали решение - перегрузи в своём классе equals и hashCode и будет тебе счастье. Корректно перегрузи только.
Добавлено через 1 минуту и 47 секунд Просто, у тебя в коллекции при проверке на наличие юзверя происходит сравнение по ссылкам, а ссылки могут быть разными. Сравнивать же надо у тебя данные, а их расположение в памяти. ![]() -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
nornad |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Смотрим javadoc по поводу того, как работает метод List.contains:
Вывод - если ссылки не нулевые, то надо сравнивать данные методом equals. Рисуем себе equals:
Так как у тебя идёт завязка на таблицу в базе, где есть идентификатор - этого для сравнения хватит (если ещё считать, что новая запись с тем же именем должна иметь другой индентификатор). То есть, уникальность организуется за счёт идентификаторов. hashCode я перегружать не силён, да и данная перегрузка equals не оптимальна, так что будет неплохо, если знающие люди поправят и дополнят. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
||||
|
|||||
greef |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 10.10.2007 Репутация: нет Всего: нет |
Класс User extends BaseObject. А в BaseObject переопределены equals и hashCode.
Или я не так понял?
|
|||
|
||||
nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
По коду прям всё сразу стало ясно, как там происходит сравнение. Либо откопай код непосредственно сравнения, либо перегрузи и проверь.
-------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |