Ao criar uma Conta e Movimentacao no mesmo EntityManager retorna conta.getMovimentacoes() = null, mas grava no banco.
Como contornar esses casos?
import javax.persistence.EntityManager;
import javax.persistence.Query;
import br.com.caelum.financas.modelo.Conta;
import br.com.caelum.financas.modelo.Movimentacao;
import br.com.caelum.financas.modelo.TipoMovimentacao;
import br.com.caelum.financas.util.JPAUtil;
public class TesteTodasAsMovimentacoesDasContas {
public static void main(String[] args) {
EntityManager em = new JPAUtil().getEntityManager();
em.getTransaction().begin();
Conta conta1 = new Conta();
conta1.setBanco("001 - BANCO DO BRASIL");
conta1.setNumero("16987-8");
conta1.setAgencia("6543");
conta1.setTitular("teste quatro");
em.persist(conta1);
em.persist(conta1);
Movimentacao movimentacao1 = new Movimentacao();
movimentacao1.setData(Calendar.getInstance()); //hoje
movimentacao1.setDescricao("teste 4");
movimentacao1.setTipo(TipoMovimentacao.SAIDA);
movimentacao1.setValor(new BigDecimal("100.0"));
movimentacao1.setConta(conta1);
em.persist(movimentacao1);
em.getTransaction().commit();
//String jpql = "select c from Conta c";//no relacionamento ...toMany temos o cenário Lazy, onde podemos resolver com join fetch
String jpql = "select c from Conta c join fetch c.movimentacoes";
Query query = em.createQuery(jpql);
List<Conta> todasAsContas = query.getResultList();
for (Conta conta : todasAsContas) {
System.out.println("Titular: " + conta.getTitular());
System.out.println("Movimentacoes: ");
System.out.println(conta.getMovimentacoes());//teste do N+1
}
}
}
Titular: teste tres
Movimentacoes:
[teste 3]
Titular: teste quatro
Movimentacoes:
null