در Hibernate زمانی که میخواهید یک کلاس را به جداول پایگاه داده map کنید شما را مجبور میکند تا در Entity خود یک primary key معرفی کنید. اما آیا تا بحال شده است از خودتان بپرسید که چرا hibernate شما را مجبور به این کار میکند؟ در صورتی که پایگاه داده اصراری برای ایجاد primary key ندارد - برای اطلاع بیشتر توضیح میدهم که پایگاه داده الزامی ندارد که شما در جداول خود کلید داخلی تعریف کنید

اصل این موضوع مربوط می شود به تفاوت مفهوم ساختاری Object و رکوردهای ذخیره شده در پایگاه داده. همان طور که میدانید هر Object در memory کاملا یکتا می باشد حتی اگر تمامی property های دو Object کاملا یکسان باشد چرا که هر object در مسیر خاصی از حافظه قرار میگیرد بنابراین دو Object نمیتواند در یک مسیر از memory قرار گرفته باشد پس هر object کاملا یکتا می باشد. اما در پایگاه داده این قانون وجود ندارد شما می توانید در یک جدول رکورد های کاملا یکسانی ایجاد کنید که در یک جدول ذخیره شده است.

برای پیاده سازی این خاصیت ‌Object ها در پایگاه داده Hibernate شما را ملزم به مشخص کردن کلید داخلی (Primary Key) می کند.