Hibernate can use two types of fetch when you are mapping the relationship between two entities: EAGER and LAZY.
In general, the EAGER fetch type is not a good idea, because it tells JPA to always fetch the data, even when this data is not necessary.
Per example, if you have a Person entity and the relationship with Address like this:
@Entity
public class Person {
@OneToMany(mappedBy="address", fetch=FetchType.EAGER)
private List<Address> addresses;
}
Any time that you query a Person, the list of Address of this Person will be returned too.
So, instead of mapping your entity with:
@ManyToMany(mappedBy="address", fetch=FetchType.EAGER)
Use:
@ManyToMany(mappedBy="address", fetch=FetchType.LAZY)
Another thing to pay attention is the relationships @OneToOne and @ManyToOne. Both of them are EAGER by default. So, if you are concerned about the performance of your application, you need to set the fetch for this type of relationship:
@ManyToOne(fetch=FetchType.LAZY)
And:
@OneToOne(fetch=FetchType.LAZY)