javax.persistence.FetchType
Com o FetchType podemos definir a forma como serão trazidos os relacionamentos, podemos fazer de duas formas:
FetchType.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.
Exemplo de relacionamento EAGER onde ao consultar uma Página de um álbum já traz também todos as Fotos que estão relacionadas com aquela página:
Nesse exemplo utilizamos a enum FetchType.EAGER no relacionamento um-para-um para informar que quando consultarmos a entidade Pagina, queremos consultar também a entidade Foto ao mesmo tempo. Por padrão quando não é especificado o FetchType ele é EAGER.
FetchType.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 onde o corpo da mensagem é consultado apenas quando houver a necessidade:
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.