شناسایی یک شی در virtual machine و پایگاه داده با هم متفاوت است:
-
در VM: برای شی IDای نگه داشته نمی شود بلکه Reference ای به مکانی از حافظه که شی در آن قرار دارد نگه داشته می شود.
-
در DB: هر شی (موجودیت) در هر جدولی با ID به طور یکتا شناسایی می شود (که همان Primery Key است).
فرض کنید که یک شی از نوع Person و با نام p1 ساخته اید و آن را در DB ذخیره (persist) کرده اید؛ در جای دیگر از کُد خود، همین موجودیت ذخیره شده را از DB خوانده اید و در یک شی دیگر از نوع Person و نام p2 ریخته اید. الان شما دو شی p1 و p2 دارید که از نظر VM یکسان نیستند، ولی به یک موجودیت (سطر) در DB نگاشت شده اند.
پس مهم است که equals و hashcode را بازنویسی (override) کنیم. با بازنویسی کردنِ متد equals می توانیم شرایطی را تعیین کنیم که دو شی با هم یکسان هستند یا خیر، بدون این که Reference آنها را درنظر بگیریم. (یادآوری: هر وقت equals بازنویسی شود، hashcode نیز باید بشود؛ اشیای equals باید hashcode شان نیز برابر باشد) دقت شود که equals در حالت پیش فرض، Reference های اشیا را با هم مقایسه می کند (برای همین است که باید بازنویسی شود).
برای اشیایی که persist می شوند: مهم است که تمام اشیای نمایانگرِ یک موجودیت (سطر) در DB، یکسان (equals) باشند؛ مخصوصا زمانی که با collection ها (مانند Set و List) سروکار داریم.