Fetch strategy e lazy initialization

Olá Pessoal,

Gostaria de verificar se entendi corretamente os conceitos citados acima e a relação, ou não, entre eles.
Vamos imaginar um relacionamento de 1:N onde a propridade que representa a lista de N esteja configurada como lazy.

Ao fazer um find na classe que representa o 1, a lista não será carregada pois é lazy. Certo?
Ao se invocar o getListaN, o hibernate fará um select e buscará todos os N filhos de um determinado pai. Certo?

Isso é a parte do lazy loading.

Pelo que entendi o fetch strategy diz como será feita a amarração entre os relacionamentos. Pode ser “join”, “select” ou alguns outros.
Normalmente é por “select” funciona igual descrito acima, pois quando é join o hibernate já carrega o 1 e o N em um mesmo select usando join. Não é?

O que eu quero ter certeza é do seguinte: O fetch stragegy só faz alguma diferença para relacionamentos não-lazy. Está correta esta afimação?

Eu também gostaria de entender mais claramente como funcionam as fetch strategy de “sub-select” e “batch”.

Obrigado.