Skip to main content

A Deep Dive into JPA Fetch Types: Exploring the Default Loading Strategy

When working with Java Persistence API (JPA), it's essential to understand the different fetch types for entity associations. In JPA, you can define the fetch type for relationships between entities, which determines how related entities are loaded from the database.

In JPA, the default fetch types for different mappings are as follows:

One-to-One Relationship

For a one-to-one relationship, the default fetch type is FetchType.EAGER. This means that the associated entity will be loaded from the database eagerly, along with the main entity.


@Entity
public class Author {
    // ...
    
    @OneToOne(fetch = FetchType.EAGER)
    private Address address;
    
    // ...
}

@Entity
public class Address {
    // ...
}
    

One-to-Many Relationship

For a one-to-many relationship, the default fetch type is FetchType.LAZY. This means that the associated entities will not be loaded from the database until explicitly accessed by your code.


@Entity
public class Order {
    // ...
    
    @OneToMany(fetch = FetchType.LAZY)
    private List items;
    
    // ...
}

@Entity
public class OrderItem {
    // ...
}
    

Many-to-One Relationship

For a many-to-one relationship, the default fetch type is FetchType.EAGER. This means that the associated entity will be loaded from the database eagerly when the main entity is loaded.


@Entity
public class OrderItem {
    // ...
    
    @ManyToOne(fetch = FetchType.EAGER)
    private Order order;
    
    // ...
}

@Entity
public class Order {
    // ...
}
    

Many-to-Many Relationship

For a many-to-many relationship, the default fetch type is FetchType.LAZY for both sides of the relationship. This means that the associated entities will not be loaded until you access the relationship in your code.


@Entity
public class Book {
    // ...
    
    @ManyToMany(fetch = FetchType.LAZY)
    private List authors;
    
    // ...
}

@Entity
public class Author {
    // ...
    
    @ManyToMany(mappedBy = "authors", fetch = FetchType.LAZY)
    private List books;
    
    // ...
}
    

Summary

In JPA, the default fetch types for different mappings are:

  • One-to-One: FetchType.EAGER
  • One-to-Many: FetchType.LAZY
  • Many-to-One: FetchType.EAGER
  • Many-to-Many: FetchType.LAZY
Understanding the default fetch types is crucial for optimizing performance and minimizing unnecessary database queries.

Comments

Popular posts from this blog

a simple example for jdbc PreparedStatement

a simple example for PreparedStatement package basics.in.java.blogspot.in; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Main { private static final String USERNAME="root"; private static final String PASSWORD=""; private static final String CONN_STRING="jdbc:mysql://localhost/basicsinjavablogspot"; public static void main(String[] args) throws ClassNotFoundException, SQLException { Class.forName("com.mysql.jdbc.Driver"); Connection conn=null; Statement stmt=null; ResultSet rs=null; try { conn= DriverManager.getConnection(CONN_STRING, USERNAME, PASSWORD); System.out.println("database connection successful"); //stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); String sql="select * fr...

Server-Side Pagination with React-Table and Spring Boot JPA with H2 Database

Pagination is a common technique used to split large amounts of data into smaller, more manageable chunks. With server-side pagination, data is retrieved from the server in smaller batches, reducing the amount of data transferred over the network and improving application performance. React-Table provides a wide range of built-in features such as sorting, filtering, pagination, row selection, and column resizing. These features can be easily configured and customized to fit specific requirements. For example, you can customize the sorting behavior to handle multiple sorting criteria, or you can add custom filters to the table to handle complex data filtering scenarios. Additionally, React-Table provides a flexible API that allows developers to extend its functionality with custom hooks, plugins, and components. This means that you can easily add custom functionality to the table, such as exporting data to CSV or integrating with external data sources. In terms of styl...