Size: a a a

2020 November 21

N

Nonverbis in learn.java
binka 💬
эти методы никто не пишет, не стоит заморачиваться. поставил аннотацию в lombok и все сгенерится
не сгенерится. пока объект не сохранен в бд, в id у него null. так что два объекта с одинаковыми данными до сохранения в бд будут одинаковыми, а после - разными. это большая проблема, кстати.
источник

N

Nonverbis in learn.java
binka 💬
еще в IDEA есть генератор
он нагенерит тонну кода. код чаще читают, чем пишут. зачем мне тонна.
источник

b

basic instinct in learn.java
binka 💬
еще в IDEA есть генератор
если ты переопределяешь-ты можешь нарушить контракт
источник

ch

central hardware in learn.java
Nonverbis
#вопрос
Изучаю Spring, а, в частности, Spring Data JPA.
Беспокоит, hashCode  и equals.

Во-первых, если класс содержит много переменных класса, код для equals и hashCode очень сильно раздувается. Более того, насколько я понимаю, если ошибешься, то могут быть большие неприятности. ID нет на этапе создания экземпляра класса. Это надо добавлять еще проверку, пуст ли id. В общем, ошибиться-то можно.

Но решением этой проблемы мне видится uuid. Вот так:

@Column(unique = true, nullable = false)
   private UUID uuid = UUID.randomUUID();

Это очень простой и понятный кусочек кода. Теперь можно легко сравнивать. Сравнил uud - все норм. И хэш от него можно взять.

И теперь можно вот это вот все вынести в BaseEntity. И вообще забыть - и работать будет идеально.

А если так не сделать, придется каждый раз что-то мудрить и с hashCode, и в equals.

Скажите, пожалуйста, это решение уродливое или наоборот красивое?
а если у вас два обьекта с одним и тем же UUID, то все UB
источник

N

Nonverbis in learn.java
basic instinct
если ты переопределяешь-ты можешь нарушить контракт
А что я переопределяю? хэши и иквалс? так их и так надо переопределять.
источник

N

Nonverbis in learn.java
central hardware
а если у вас два обьекта с одним и тем же UUID, то все UB
что такое ub?
источник

ch

central hardware in learn.java
undefined behavior
источник

N

Nonverbis in learn.java
central hardware
undefined behavior
два объекта с одним uuid - это одинаквые объекты. в чем проблема-то?
источник

b

basic instinct in learn.java
Nonverbis
А что я переопределяю? хэши и иквалс? так их и так надо переопределять.
их нужно переопределить корректно ,чтобы была рефлективность ,симметричность ,транзитивность ,согласованность  и условие сравнение нулей
источник

b

basic instinct in learn.java
и все работало корректно,иначе можно и не париться)
источник

N

Nonverbis in learn.java
basic instinct
их нужно переопределить корректно ,чтобы была рефлективность ,симметричность ,транзитивность ,согласованность  и условие сравнение нулей
Если будет uuid, это все будет. Единственное, что я что-то про сравнение нулей пока туплю. Но я не вижу тут вот именно с этой стороны никаких проблем.
источник

かたかわ in learn.java
Nonverbis
не сгенерится. пока объект не сохранен в бд, в id у него null. так что два объекта с одинаковыми данными до сохранения в бд будут одинаковыми, а после - разными. это большая проблема, кстати.
Почему не сгенерится? И что с того, что если id null? Ведь два объекта сравнить надо? И айди перед сохранением в БД нет? Тогда в чём проблема?
источник

ch

central hardware in learn.java
Nonverbis
два объекта с одним uuid - это одинаквые объекты. в чем проблема-то?
а кто будет гарантировать что одинаковые UUID это одинаковые обьекты? вот вы создали обьект и опа колизия
источник

N

Nonverbis in learn.java
かたかわ
Почему не сгенерится? И что с того, что если id null? Ведь два объекта сравнить надо? И айди перед сохранением в БД нет? Тогда в чём проблема?
проблема в том, что это два разных объекта. а у вас он будет один. ну, разве нет.

Допустим, новый объект хлеб. И еще раз новый объект хлеб. При сохранении это будут два разных объекта. у каждого свой id .А у вас это будет до сохранения в базу один и тот же объект.
источник

b💬

binka 💬 in learn.java
Nonverbis
не сгенерится. пока объект не сохранен в бд, в id у него null. так что два объекта с одинаковыми данными до сохранения в бд будут одинаковыми, а после - разными. это большая проблема, кстати.
не понимаю если честно какую проблему вы решаете и зачем это нужно)

я бы не стал полагаться на equals потому что это как минимум сложно поддерживать
источник

DS

Dmitriy Shilnikov in learn.java
Nonverbis
не сгенерится. пока объект не сохранен в бд, в id у него null. так что два объекта с одинаковыми данными до сохранения в бд будут одинаковыми, а после - разными. это большая проблема, кстати.
Так ты добавь проверку, что если id == null, то объект равен только самому себе
источник

IG

Ivan Goncharov in learn.java
Мужики кто нибудь валидировал DTO объекты с помощью  validation-API? Вожусь 3ий день, но чет не работает.
источник

ch

central hardware in learn.java
Ivan Goncharov
Мужики кто нибудь валидировал DTO объекты с помощью  validation-API? Вожусь 3ий день, но чет не работает.
ошибки, проблемы какие?
источник

IG

Ivan Goncharov in learn.java
central hardware
ошибки, проблемы какие?
просто не работает.
источник

DS

Dmitriy Shilnikov in learn.java
https://vladmihalcea.com/the-best-way-to-implement-equals-hashcode-and-tostring-with-jpa-and-hibernate/
Вот статья есть от чела. который книжку по хибернейту писал, он прямо рекомендует этот способ, как один из возможных
источник