Шутки в сторону - вот что документация хербернейта говорит
>Although using a natural-id is best for equals and hashCode, sometimes you only have the entity identifier that provides a unique constraint.
It’s possible to use the entity identifier for equality check, but it needs a workaround:
you need to provide a constant value for hashCode so that the hash code value does not change before and after the entity is flushed.
you need to compare the entity identifier equality only for non-transient entities
А, там же id = null до сохранения. Да, с такими фишечками ну его нахер этот ORM - свой мир со своими странными правилами.