Configuring Primary Keys and Generated Values

When working with Hibernate and JPA, configuring primary keys and generated values is an essential part of database design and entity mapping. Primary keys uniquely identify each record in a database table and are crucial for data integrity and efficient querying. In this article, we will explore various options for configuring primary keys and generating their values using Hibernate and JPA.

Primary Key Generation Strategies

Hibernate offers different strategies for generating primary key values automatically. These strategies can be configured using annotations or XML mappings. Let's take a look at some commonly used strategies:

1. GenerationType.AUTO

This strategy allows Hibernate to automatically select a suitable primary key generation strategy based on the underlying database. It could use a table, sequence, or an IDENTITY column, depending on the database dialect. However, the selection of the strategy is not always optimal, and it may lead to performance issues in some cases.

2. GenerationType.IDENTITY

This strategy relies on an auto-incremented column provided by the database. The database takes care of generating and assigning a unique value for each new record automatically. This strategy works well with databases like MySQL, PostgreSQL, and SQL Server, which support auto-increment columns.

3. GenerationType.SEQUENCE

In this strategy, a separate database sequence is used to generate primary key values. The sequence generates unique numbers, which are then assigned to new records. This strategy is suitable for databases supporting sequence-based primary key generation, such as Oracle and PostgreSQL. However, not all databases support sequences, so it's crucial to check the specific database's capabilities.

4. GenerationType.TABLE

With this strategy, a separate table is used to generate primary key values. The table contains dedicated rows and columns to track and generate unique values for each new record. This strategy can be used with any database, but it may introduce additional overhead due to the extra table and synchronization requirements.

Configuring Primary Keys

To configure primary keys in Hibernate and JPA, we can use the @Id annotation on the entity's primary key attribute. By default, Hibernate assumes the primary key column name is the same as the attribute name, but we can customize it using the @Column annotation. Here's an example:

public class Book {
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "book_title")
    private String title;

    // Getter and setter methods

In this example, we use the GenerationType.IDENTITY strategy for key generation. The @GeneratedValue annotation specifies the strategy for generating primary key values. We can also provide additional configuration options, such as the initial value and allocation size, depending on the selected strategy.


Configuring primary keys and generated values is an essential aspect of designing efficient database schema and entity mapping in Hibernate and JPA. Understanding the available primary key generation strategies and configuring them appropriately ensures data integrity and performance in our applications. By utilizing the various options provided by Hibernate and JPA, we can create robust and scalable systems.

noob to master © copyleft