Boa noite, estou com a seguinte duvida...
Executei este codigo:
public static void main(String[] args) {
EntityManager em = new JPAUtil().getEntityManager();
em.getTransaction().begin();
String jpql = "Select c FROM Conta c";
Query query = em.createQuery(jpql);
@SuppressWarnings("unchecked")
List<Conta> todasContas = query.getResultList();
em.close();
for (Conta conta : todasContas) {
System.out.println("Titular: " + conta.getTitular());
System.out.println("Movimentacoes: " + conta.getMovimentacoes());
}
System.exit(0);
}
}
E funcionou igual a primeira forma feita no video, (Lazy)... minha duvida é a seguinte, como ele fez a query de forma lazy qdo eu chamei o .getMovimentacoes() sendo que eu ja tinha fechado o EntityManager? (em.close()) ???
depois fiz dessa outra forma:
public static void main(String[] args) {
EntityManager em = new JPAUtil().getEntityManager();
String jpql = "Select c FROM Conta c";
Query query = em.createQuery(jpql);
@SuppressWarnings("unchecked")
List<Conta> todasContas = query.getResultList();
for (Conta conta : todasContas) {
System.out.println("Titular: " + conta.getTitular());
System.out.println("Movimentacoes: " + conta.getMovimentacoes());
}
em.close();
System.exit(0);
}
Ou seja, joguei o laco do for antes do em.close e APAGUEI a linha em.getTransaction().begin()... e tbm funcionou da forma lazy, sem dar excecao...
Resumindo minhas duvidas: 1) como no primeiro codigo ele fez novas querys no banco qdo da chamada do metodo .getMovimentacoes() se o EntityManager ja estava fechado?
2) no segundo codigo, pq mesmo eu omitindo a linha em.getTransaction().begin() tudo funciona normalmente?
Obrigado.