|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
Когда JPA(hibernate) использует equals/hashcode у entity18.04.2013, 01:01. Показов 4033. Ответов 6
Метки нет (Все метки)
Что-то я совсем запутался когда они должны вызываться, подскажите пожалуйста.
Добавлено через 102 часа 59 минут Наверное я непонятно выразился, попробую ещё раз: когда jpa при работе с entity manager и использовании его методов вроде persist/merge/find может полезть к реализациям hashCode / equals ?
0
|
|
| 18.04.2013, 01:01 | |
|
Ответы с готовыми решениями:
6
Функции классов сущностей equals и hashCode формируемые Hibernate Hashcode и Equals JPA/Hibernate Дайте совет по проэктированию Entity |
|
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) -
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
|
|
| 22.01.2019, 04:17 | |
|
Помогаю со студенческими работами здесь
7
Переопределить equals() и hashCode() Переопределяем equals и hashcode Переопределение equals() и hashCode() Переопределение hashcode и equals HashCode и equals (переопределение) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Архитектура слоя интернета для сервера-слоя.
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
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|