Uma Conta possui uma lista de Movimentações. Ao persistir uma conta as movimentações não deveriam ser persistidas de forma automática? Caso seja possível, como faria?
Uma Conta possui uma lista de Movimentações. Ao persistir uma conta as movimentações não deveriam ser persistidas de forma automática? Caso seja possível, como faria?
Opa Aline, não deveria.. só vai ser se vc marcar como cascade type persist/merge.
Aproveitando este tópico, toda vez que eu persisto uma movimentação, além de criar a movimentação duplica a conta. PQ?
nao da para saber sem ver o codigo, Daniel. A movimentacao pode estar associada com uma conta e vc ter usado cascade no relacionamento.. apenas um chute.
package br.com.caelum.financas.util;
import java.math.BigDecimal;
import java.util.Calendar;
import javax.persistence.EntityManager;
//import javax.persistence.EntityManagerFactory;
//import javax.persistence.Persistence;
import br.com.caelum.financas.modelo.Conta;
import br.com.caelum.financas.modelo.Movimentacao;
import br.com.caelum.financas.modelo.TipoMovimentacao;
public class PopulaMovimentacao {
public static void main(String[] args) {
double inicio = System.currentTimeMillis();
//conta nova
Conta conta = new Conta();
conta.setTitular("José das Couves");
conta.setBanco("CEF");
conta.setAgencia("6152");
conta.setNumero("227620");
Movimentacao movimentacao = new Movimentacao();
movimentacao.setData(Calendar.getInstance());
movimentacao.setDescricao("Conta de luz");
movimentacao.setTipoMovimentacao(TipoMovimentacao.SAIDA);
movimentacao.setValor(new BigDecimal("99.89"));
movimentacao.setConta(conta);
EntityManager manager = new JPAUtil().getEntityManager();
manager.getTransaction().begin();
manager.persist(conta);
manager.find(Conta.class, 3);
conta.setTitular("José das Couves");
manager.getTransaction().commit();
manager.getTransaction().begin();
manager.persist(movimentacao);
manager.getTransaction().commit();
manager.close();
double fim = System.currentTimeMillis();
System.out.println("Executado em: " + (fim - inicio)/1000 + "s");
}
}
Segue o código da classe. Pelo que estou entendo, toda vez que eu estancio a classe Conta, ele entende como uma nova conta, mesmo eu mudando o estado para managed antes de persistir. Nos exercícios do curso a classe PopulaMovimentacao/TestaMovimentacao estava assim e ele conseguiu gerar várias movimentações para uma única conta e eu não estou conseguindo.