Understanding Candidate Keys, Primary Key, Natural Key, and Surrogate Keys in Hibernate


In this article, I will delve into the concepts of candidate keys, primary keys, natural keys, and surrogate keys in the context of Hibernate.

Candidate Keys

A candidate key is a column or a set of columns in a database table that can uniquely identify each row in the table. It means that candidate keys are unique and non-null attributes that can be used to identify a single record uniquely. The name candidate suggests that they can be picked as the table’s primary key.
Consider a table named “Employee” with columns: emp_id, emp_email, and emp_phone. Both emp_id and emp_email can be candidate keys as they uniquely identify employees in the table.

Primary Key

The primary key is a specific candidate key chosen to uniquely identify each row in a table. In Hibernate, entities are typically mapped to database tables, and the primary key is crucial for Hibernate’s internal workings, such as associating relationships and efficiently retrieving individual records.
In the “Employee” table mentioned above, if emp_id is chosen as the primary key, it will uniquely identify each employee in the table.

Natural Key

A natural key is a type of candidate key derived from the attributes that already exist in the real-world entity being modeled (in other words, the key has business meaning). They often correspond to unique attributes of the entity, such as an email address or a government-issued ID.

In the “Employee” table, emp_email is a natural key since it’s a candidate key that has real-world meaning.

Surrogate Key

A surrogate key is an artificial primary key that has no real-world significance and is introduced solely for the purpose of identifying records uniquely. It is an auto-generated, managed by the system value that is assigned to each row when it is inserted into the database. Surrogate keys are often integers or long values and can simplify data management, especially when dealing with complex relationships or natural keys that may change over time.

In the “Employee” table, if a new column named emp_sequence is introduced as an auto-incrementing number, it can serve as a surrogate key to uniquely identify each employee record.


In Hibernate, the terms candidate keys, surrogate keys, natural keys are usually seen in the process of choosing tables’ primary keys. A primary key in Hibernate ideally unique, not null and immutable.

In this post, I’ve introduced the concepts of primary keys, candidate keys, surrogate keys and natural keys.

Leave a Comment