FetchType
Com o FetchType podemos definir a forma como serão trazidos os relacionamentos, podemos fazer de duas formas:
EAGER - Traz todas as entidades que estão relacionadas, ou seja, se a Entidade A possui um relacionamento com a Entidade B, então quando consultar a Entidade A, também será consultado suas referencias na Entidade B.
LAZY - Não traz as entidades que estão relacionadas, ou seja, se a Entidade A possui um relacionamento com a Entidade B, então quando consultar a Entidade A só serão retornadas as informações referentes a esta Entidade.
Exemplo de relacionamento LAZY, desse modo o corpo da mensagem é consultado apenas quando houver a necessidade:
@Entity
public class Mensagem {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String assunto;
@Temporal(TemporalType.DATE)
private Date dataEnvio;
@OneToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
private MensagemCorpo mensagemCorpo;
}
Nesse exemplo utilizamos a enum FetchType.LAZY no relacionamento um-para-um para informar que quando consultarmos a entidade Mensagem, não queremos consultar a entidade MensagemCorpo ao mesmo tempo.