Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517

Когда JPA(hibernate) использует equals/hashcode у entity

18.04.2013, 01:01. Показов 4033. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что-то я совсем запутался когда они должны вызываться, подскажите пожалуйста.

Добавлено через 102 часа 59 минут
Наверное я непонятно выразился, попробую ещё раз:
когда jpa при работе с entity manager и использовании его методов вроде persist/merge/find может полезть к реализациям hashCode / equals ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.04.2013, 01:01
Ответы с готовыми решениями:

Функции классов сущностей equals и hashCode формируемые Hibernate
Доброго времени суток! Ребят скажите для чего Hibernate в классах сущностях создаёт следующие методы: @Override public...

Hashcode и Equals
Здравствуйте! Возникла необходимость выяснить точные ответы на следующие вопросы: Добавлено через 3 минуты 1) Как работает hashcode...

JPA/Hibernate Дайте совет по проэктированию Entity
Пишу приложение "Система управления рестораном". Столкнулся с проблемой что немогу придумать как правильно организовать заказ. Есть четыре...

6
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
18.04.2013, 13:00
когда юзаешь сет вместо листа, тогда юзаются эти методы, так как в сете нет дубликатов
1
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
18.04.2013, 14:00  [ТС]
mutagen, кажеться тогда я понял почему у меня в одном месте после fetch join получается куча дубликатов, надеюсь это то что я не перегрузил эти методы является тому причиной ...
0
138 / 7 / 1
Регистрация: 31.03.2015
Сообщений: 395
10.01.2019, 03:05
Не знаю имеет моя ситуация отношение к этой теме но коротко опишу. Вот похожый пример моих двух ентитей связанных двосторонней зависмостью 1:M (M:1) - -
Мое основное задание сохранить обьект Child со ссылкой на Parent (setParent(parent)) в таблице - для Чайлдов фактически нету проблему дубликатов (они достаочно разные), а для парента если например они одинаковы для первых двух, и уже строка-парента есть - то создается сперва один дубликат, а потом - второй парента. А мне надо чтобы если кроме id - все поля одинаковы чтобы - сохранение чайлда происходило, а парента нет (но была ссылка на существующий parent_id). В то же время протестил хибернейт для более простого примера - если в парента - поля имя и фамилия одинаковы (есть два поля кроме идентификатора) то при использование save (saveOrUpdate) - новые паренты создаются в таблице. Как разрешить эту проблему для второго более простого примера - через session.get()/load()/find() - мне надо загружать в контекст сесии все паренты с бд (с id) и посредством сравнение (hashcode()/equals()) сравнивать их парентом (без id - это поля не включаются в hashcode()/equals()) который я хочу сохранить - и если этот перечень сравнений ни разу не возращает true - тогда сохранять (save/saveorupdate), иначе не сохранять и возвращать например id найденного аналогичного обьекта (дополнительная трудность если дубликаты уже есть). Потом если сохранять чайлды (по вышеприведенному принципу - хотя там могут быть дубликаты - но не может быть дубликата связки child-parent), как обезпечить чтобы при сохранение нового чайлда - не создавать новый парент-дубликат в таблице с помощью хибернейта - а привязать к уже существующему?? Насколько помню у меня так анотация записана -
@Manytoone (cascade=CascadeType.All)
@JoinColumn(parent_parent_id)
? Аналогичные вопросы и при апдейте строки в таблице если хибернейту передается транзиент энтити без id?
0
138 / 7 / 1
Регистрация: 31.03.2015
Сообщений: 395
10.01.2019, 18:29
Вроде не такой сложный вопрос?!
Если это надо делать не с помощью загрузки всей таблицы в контекст - что действительно
абсолютно невыгодно в смысле экономии ресурсов при уже тысячах энтитей -
а надо использовать createquery (hsql) - то напишите.
Но для чего тогда эти энтити(обьекты) при таких ограничениях - что-ли для выбора
данных из бд, и простого сохранения?
0
138 / 7 / 1
Регистрация: 31.03.2015
Сообщений: 395
21.01.2019, 04:11
Нету времени чтобы разобрать этот пример с двусторонней зависимостью - OneToMany и ManyToOne -
Но даже в этом примере создается новый экземляр родительской сущности в таблицы (хотя она уже есть в таблице)
пусть я использую метод session.update(Parent) или session.SaveOrUpdate(Parent) -
Java
1
2
3
4
5
6
7
8
9
10
11
session.beginTransaction();
Parent par=new Parent("A","B");
Child chi = new Child("A1","B1","C1","D1");
chi.setParent(par);
Query query=session.createQuery("from Parent");
for(Object obj:query.list()) {
            Parent p=(Parent)obj;
            if (p.equals(par)) {p.getChildren().add(chi); session.update(p); break;}
        }
session.saveOrUpdate(chi);
session.getTransaction().commit();
В чем дело? В том что createQuery(...) создает список detached entities (или например таким становится Parent p=(Parent)obj )- что надо сперва - session.merge(p) перед session.update(p)??
0
138 / 7 / 1
Регистрация: 31.03.2015
Сообщений: 395
22.01.2019, 04:17
Вынужден сам и ответить - что в общем очень просто.
Дело в состояние сущности - надо передавать ссылку на загруженную с бд сущность,
а не на вновь созданную сущность (что создаст новую строку в таблице) -
То есть надо удалить:
4. chi.setParent(par);
И вставить ссылку на парент здесь: 8... { chi.setParent(p); p.getChildren().add(chi); session.update(p); ...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.01.2019, 04:17
Помогаю со студенческими работами здесь

Переопределить equals() и hashCode()
Помогите пожалуйста с equals() и hashCode(). Есть класс в котором хранится многоменый массив. equals() переопределила( не знаю если...

Переопределяем equals и hashcode
Добрый день Допустим есть класс с тремя полями(1, 2, 3), я хочу переопределить еквалс, но так, что если первые 2 поля...

Переопределение equals() и hashCode()
Если есть класс Point: public class Point { private int x; private int y; public Point(int x, int y) { ...

Переопределение hashcode и equals
Здравствуйте. Помогите пожалуйста понять ошибку "Method does not override method from its superclass". По заданию мне нужно бы создать...

HashCode и equals (переопределение)
Здравствуйте, у меня возникла сложность с нashCode и equals. ______________________________________________________________________ ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru