2020-04-18

Type of FetchMode in Hibernate

Different Type of FetchMode in Hibernate


FetchMode.SELECT


The association is going to be fetched lazily using a secondary select for each individual entity, collection, or join load. It’s equivalent to JPA FetchType.LAZY fetching strategy.

FetchMode.SELECT mapping example

@Entity(name = "Department")
public static class Department {

@Id
private Long id;

@OneToMany(mappedBy = "department", fetch = FetchType.LAZY)
@Fetch(FetchMode.SELECT)
private List<Employee> employees = new ArrayList<>();

//Getters and setters omitted for brevity

}

@Entity(name = "Employee")
public static class Employee {

@Id
@GeneratedValue
private Long id;

@NaturalId
private String username;

@ManyToOne(fetch = FetchType.LAZY)
private Department department;

//Getters and setters omitted for brevity

}

FetchMode.SUBSELECT


Available for collections only. When accessing a non-initialized collection, this fetch mode will trigger loading all elements of all collections of the same role for all owners associated with the persistence context using a single secondary select.

FetchMode.SUBSELECT mapping example
@OneToMany(mappedBy = "department", fetch = FetchType.LAZY)
@Fetch(FetchMode.SUBSELECT)
private List<Employee> employees = new ArrayList<>();

FetchMode.JOIN


Use an outer join to load the related entities, collections or joins when using direct fetching. It’s equivalent to JPA FetchType.EAGER fetching strategy.

FetchMode.JOIN mapping example
@OneToMany(mappedBy = "department")
@Fetch(FetchMode.JOIN)
private List<Employee> employees = new ArrayList<>();

No comments:

Post a Comment