Opa boa tarde, vi a video alua do instrutor e fiquei um pouco confuso, ai fui atras de fórum para complementar o conhecimento sobre JPA com Hibernate, vi em forum que por exemplo uma anotação OneToOne tem como o comportamento EAGER, já o OneToMany ou até mesmo o ManyToMany tem o comportamento LAZY, parece que é bom sempre usar o comportamento Lazy para ("evitar que o hibernate fique acessando o banco desncessariamente") Então pesquisando sobre fui mais a fundo e vi que por exemplo.
Se tiver uma tabela.
public Class Venda {
//restante dos atributos da classe
@ManyToMany
private List<Produto> produtos;
}
public Class Produto {
//restante dos atributos da classe
private String nome;
}
Nesse caso tenho um comportamento Lazy correto? Se por exemplo eu fizer uma query.
manager.createQuery("SELECT v FROM Venda v", Venda.class).getResultList();
Aqui com o comportamento Lazy irá retornar apenas a minha venda sem a classe produto?
Vi também nesse caso, usando o Lazy, se eu fizer o meu getProduto algo assim.
List<Venda> vendas = manager.createQuery("SELECT v FROM Venda v", Venda.class).getResultList();
no meu caso se eu fizer o for, acessando o meu venda.getProdutos(), ele irá ficar indo no banco de dados o tomanho n da minha Lista da venda, então quando faço um getAlgumAtributo o lazy fica acessando o meu banco? Ou só faz isso quando acesso uma outra tabela? por exemplo venda.getProdutos(1).getId();
int i = 0;
for (Venda venda : vendas) {
venda.getProdutos(i).getId();
i++;
}
Qual seria o verdadeiro comportamento do lazy? Estou certo em afirmar isso? Obrigado.