Desse jeito, O ClienteDAO irá persistir o cliente do seguinte modo:
1- varrer a coleção de contas;
2- A cada conta, chamar o ContaBancariaDAO para persistir ContaBancaria.
3- Persistir o Cliente caso não tenha dado erro
O problema que não terá garantia de rollback da transação. Quando der erro na inserção da segunda ContaBancaria, a primeira já foi inserida com sucesso.
O correto seria usar a mesma transação para persistir o Cliente e a ContaBancaria.
Possíveis soluções:
A - Persistir tudo dentro do ClienteDAO, sem chamar o ContaBancariaDAO, e commitar ao final das operações.
B - Passar a conexão com o banco entre as classes ClienteDAO e ContaBancariaDAO (NÃO RECOMENDO).
Abs,
michelantunes
Ainda tem mais uma solução:
C - Usar JPA e anotar @OneToMany em sua classe ContaBancaria.
Abs,
sergiotaborda
carrijo:
No DAO, como eu lido com um objeto composto.
Q nem no meu caso. Eu tenho um cliente q possui n contas bancárias.
public class Cliente{
private List<ContaBancaria> contas;
}
E eu tenho uma classe ClienteDAO e outra ContaBancariaDAO.
Onde e quando eu vou construir as minhas contas bancarias?
Onde e quando vc quiser.
Se vc quer ter um campo com as contas o problema é todo seu.
Veja se isto não atende:
Esta forma é especialmente melhor se não existir um addConta/removeConta
C
carrijo
Blz!! Brigadão!
pcalcado
Se N é um número muito grande ou se trazer a conta é custoso use Lazy Loading. Se não, quando o objeto cliente for trazido do banco de dados já insira todos os dados dentro dele.
R
rafa.fgs
michelantunes:
Cara,
Desse jeito, O ClienteDAO irá persistir o cliente do seguinte modo:
1- varrer a coleção de contas;
2- A cada conta, chamar o ContaBancariaDAO para persistir ContaBancaria.
3- Persistir o Cliente caso não tenha dado erro
O problema que não terá garantia de rollback da transação. Quando der erro na inserção da segunda ContaBancaria, a primeira já foi inserida com sucesso.
O correto seria usar a mesma transação para persistir o Cliente e a ContaBancaria.
Possíveis soluções:
A - Persistir tudo dentro do ClienteDAO, sem chamar o ContaBancariaDAO, e commitar ao final das operações.
B - Passar a conexão com o banco entre as classes ClienteDAO e ContaBancariaDAO (NÃO RECOMENDO).
Abs,
só por curiosidade, pq voce nao recomenda a opção B?