Я тоже согласен с @ S.P.Floyd. Но я хотел добавить что-то еще.
Бывают ситуации, когда у субъекта нет уникальных бизнес-свойств. Например, у объекта могут быть только A
(PK) и B
(бизнес-свойство), но многие объекты имеют одинаковое значение B
.
В этом случае сложно создать equals()
и hashcode()
. Вы, конечно, не хотите основывать их на A
, так как вы не сможете сравнить постоянный объект с тем, который еще не был сохранен. И вы не можете основывать его только на B
, потому что тогда многие объекты, которые являются разными уникальными объектами, будут казаться одинаковыми.
Что я делаю в этих ситуациях, так это свойство Date created = new Date();
. Когда объект создается, он автоматически получает созданную временную метку. В мои equals()
и hashcode()
я включаю и B
, и created
. Это не идеально, так как очень маловероятно, что два объекта могут быть созданы одновременно (особенно в кластерном решении), но это только начало. Если необходимо, добавьте UID или другое сгенерированное бизнес-свойство, которое не является PK базы данных.