How to map MySQL Auto_Increment field in Java

This short tutorial discusses how to map MySQL AutoIncrement Fields in Java using Jakarta Persistence API (JPA).

An Overview of MySQL auto_increment fields

In MySQL, the AUTO_INCREMENT field is a column attribute that allows the automatic generation of unique integer values for each new row inserted into a table. It is commonly used to define a primary key column that automatically assigns a unique identifier to each record.

Key features of the AUTO_INCREMENT field in MySQL are as follows:

  1. Automatic Incrementing: When a new row is inserted into a table with an AUTO_INCREMENT field, MySQL automatically assigns the next available integer value to that field. Each subsequent insertion increments the value by 1.

  2. Uniqueness: The values generated by an AUTO_INCREMENT field are guaranteed to be unique within the scope of the table. This uniqueness ensures that each row in the table has a distinct identifier.

  3. Primary Key Usage: The AUTO_INCREMENT field is often used as a primary key column in a table. This means it uniquely identifies each row and provides fast and efficient indexing for retrieval and join operations.

  4. Data Type: The AUTO_INCREMENT field is typically defined as an integer data type, such as INT or BIGINT. The size of the data type determines the maximum value the field can store.

  5. Custom Starting Value: By default, the AUTO_INCREMENT field starts at 1 and increments by 1 for each new row. However, you can customize the starting value and increment using the AUTO_INCREMENT attribute when defining the column.

  6. Resetting the Value: It is possible to reset the value of an AUTO_INCREMENT field to a specific value using the ALTER TABLE statement. This can be useful in certain scenarios, such as when importing data or resetting a table to its initial state.

Mapping the field in Java

Next, as an example, we will create a simple table and we will map it in an Entity Java Class:

mysql> create table customer (id integer auto_increment, name varchar(25));
Query OK, 0 rows affected (0.03 sec)

Then you can map the id field using a Generation type IDENTITY:

@Entity
@Table
public class Customer  {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;

    @NotNull
    private String name;
}

Ensure that you have the necessary dependencies and configuration in your project to connect to the MySQL database using a persistence framework such as Hibernate or JPA. The above example assumes the use of an entity manager to persist and retrieve objects.

By annotating the auto-increment field with the appropriate annotations, you can map it to a corresponding field in your Java object, enabling seamless integration between your Java application and the MySQL database.

Caveats about the AUTO_INCREMENT field

Database Support: AUTO_INCREMENT is a feature specific to certain databases like MySQL. Keep in mind that JPA is an abstraction layer, and the behavior of AUTO_INCREMENT may vary across different database systems. Ensure that the database you’re using supports this feature when mapping the field.

Identity Column Strategy: In some cases, the use of AUTO_INCREMENT may limit the flexibility of the database’s identity column strategy. For example, you may encounter difficulties if you want to use a non-integer or composite key as the identity column. In such scenarios, you may need to explore alternative strategies or consult the documentation and capabilities of your specific database system.

Object Persistence: When persisting objects with an AUTO_INCREMENT field, keep in mind that the generated value will only be available after the entity has been persisted to the database. Before persistence, the id field will typically have a null value. Once the entity is saved, the id field will be populated with the generated value.

Further reading:

To learn how to configure a MySQL Database with WildFly we recommend this article: Configuring a Datasource with MySQL on WildFly

Found the article helpful? if so please follow us on Socials