powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / hashCode() в генерируемом Entity в Netbeant и в Intellij Idea через alt+Insert
8 сообщений из 8, страница 1 из 1
hashCode() в генерируемом Entity в Netbeant и в Intellij Idea через alt+Insert
    #39593149
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день :) Это даже не вопрос, а так, просто трёп, можно сказать, для понимания ситуации
Netbeans генерирует Entity файлы вот с таким вот hashCode();:
Код: java
1.
2.
3.
4.
5.
6.
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }


Idea по умолчанию генерит то же самое по сути:
Код: java
1.
2.
3.
4.
    @Override
    public int hashCode() {
        return id != null ? id.hashCode() : 0;
    }


Но если Идее сказать, что id у нас будет non-null, то получим:
Код: java
1.
2.
3.
4.
    @Override
    public int hashCode() {
        return id.hashCode();
    }


Вот здесь 21120813 было упоминание от Blazkowicz, о том, что:
С hashCode(), кстати в ORM не тривиально. Если у вас сущности не сохранены ещё, то у них у всех hashCode 0. Может боком вылезти.

Вот в связи с этим вопрос, как избежать такой ситуации, когда несколько сущностей с одним хешом равным 0 будут в рантайме?

Неужели Netbeans так не предусмотрительно генерит такие файлы. Хотя всё логично и понятно, почему так, ведь IDE не знает какие поля у нас будут.
Я предполагаю, что там это как-то обходится при генерации, а именно не нужно ей пользоваться :))
И нужно ручками генерить методы уже после добавления, к примеру поля private String name; что-то подобное:
Код: java
1.
2.
3.
4.
5.
6.
    @Override
    public int hashCode() {
        int result = id.hashCode();
        result = 31 * result + (name != null ? name.hashCode() : 0);
        return result;
    }


Сам я сталкивался с такой ситуацией и не знал почему у меня не сохраняются или частично не сохраняются данные БД, теперь я предполагаю, что та ситуация была связана именно с тем, что я не глядя доверял автогенерируемому файлу.
...
Рейтинг: 0 / 0
hashCode() в генерируемом Entity в Netbeant и в Intellij Idea через alt+Insert
    #39593431
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixicкак избежать такой ситуации, когда несколько сущностей с одним хешом равным 0 будут в рантайме?- переопределять вручную или воспользоваться lombok ( @EqualsAndHashCode ) (например, создается новый объект для последующей вставки),
- это больше, имхо, проблема дочерних сущностей, когда они вытягиваются через mappedBy (там уже как определишь, если тип коллекции дочерних сущностей определено в виде Set - тогда обязательно нужно переопределять hashCode/equals, а в случае с List - не критично - но могут быть дубликаты (: )
- ORM проксирует все обработанные ею сущности (заворачиваются в промежуточные объекты - там хранится прочая мета информация о самой сущности, включая hashCode)
...
Рейтинг: 0 / 0
hashCode() в генерируемом Entity в Netbeant и в Intellij Idea через alt+Insert
    #39593493
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NixicИ нужно ручками генерить методы уже после добавления, к примеру поля private String name; что-то подобное:не нужно переопределять и писать сравнение объектов.
Ты же хотел магии спринга? Тогда зачем заниматься этой ерундой?
Если сессии короткие и ты не отсоединяешь объекты от нее, то хибер автоматом разруливает равенство объектов.
Кроме того не держи объекты без ID. Это самое главное.
...
Рейтинг: 0 / 0
hashCode() в генерируемом Entity в Netbeant и в Intellij Idea через alt+Insert
    #39593507
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixicтеперь я предполагаю, что та ситуация была связана именно с тем, что я не глядя доверял автогенерируемому файлу.а ты разберись более конкретно, как сабж на это может повлиять.
Разумеется, магию нужно проверять. Иногда это дольше чем вообще без магии)))
...
Рейтинг: 0 / 0
hashCode() в генерируемом Entity в Netbeant и в Intellij Idea через alt+Insert
    #39593529
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usmanно могут быть дубликаты (: )вообще, надо разобраться кто виноват в дубликатах.
Ведь так можно по БЛ дважды зарплату начислить))).
...
Рейтинг: 0 / 0
hashCode() в генерируемом Entity в Netbeant и в Intellij Idea через alt+Insert
    #39593790
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Usmanно могут быть дубликаты (: )вообще, надо разобраться кто виноват в дубликатах.
Ведь так можно по БЛ дважды зарплату начислить))).Думаю, что индексы и constraint-ы в базе не подведут!
...
Рейтинг: 0 / 0
hashCode() в генерируемом Entity в Netbeant и в Intellij Idea через alt+Insert
    #39593800
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,
Конечно.
Я всегда в sql думаю когда пишу union all, distinct, left/top join и проверяю отсутствие дубликатов.
Поэтому вопрос автора надуман и он пошел по какому то сложному пути.
Хотя тема прошлая для него была.
...
Рейтинг: 0 / 0
hashCode() в генерируемом Entity в Netbeant и в Intellij Idea через alt+Insert
    #39593867
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Хотя тема прошлая для него была.форум нуждается в курилке (:
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / hashCode() в генерируемом Entity в Netbeant и в Intellij Idea через alt+Insert
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]