[hibernate-dev] Entity implementation of equals()

Steve Ebersole steve at hibernate.org
Tue Aug 27 22:28:01 EDT 2019


Generally speaking an `#equals` method would not allow subclasses to
match.  For entity mappings specifically I this it is generally considered
kosher to allow subclass matching in `#equals`.  Interestingly, when
generating `#equals` overrides through IntelliJ it even asks specifically
whether subclasses should be allowed to match.  In fact it mentions (or
used to mention) Hibernate specifically wrt proxies in the dialog.

And it's actually required (as you found) if you want to use Hibernate's
proxy-based lazy loading.

However, this is a case with a MappedSuperclass and specifically a
MappedSupperclass that is I guess shared amongst multiple root entities.
So here the allowance of subclasses is not really feasible and relying on
any kind of equality checking defined on the MappedSuperclass is not going
to work

On Tue, Aug 27, 2019 at 6:49 PM Gail Badner <gbadner at redhat.com> wrote:

> Hi,
>
> I'm looking into the impact of HHH-13590.
>
> In the test for HHH-13590, I see that the mapped superclass entity defines
> equals() as:
>
> @Override
> public boolean equals(Object o) {
>    if (this == o) return true;
>    if (o == null || getClass() != o.getClass()) return false;
>
>    ...
>
> }
>
> Due to the bug:
> * this is a Project instance;
> * o is a HibernateProxy with target == this.
>
> Because the getClass() != o.getClass(), false is returned, and that
> ultimately causes the test to fail.
>
> The fix for HHH-13590 results in comparing a Project instance with itself
> (not the proxy).
>
> I see that the documentation has a similar implementation of equals() in
> "Example 111. Natural Id equals/hashCode" of [1].
>
> In general, is it OK for equals() to require both instances to be of the
> same class?
>
> Thanks,
> Gail
>
> [1]
>
> https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#mapping-model-pojo-equalshashcode
> _______________________________________________
> hibernate-dev mailing list
> hibernate-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>


More information about the hibernate-dev mailing list