Por que no método salvar há uma instanciação de cliente e conta? Haja vista que a variável cliente nem está sendo utilizada neste caso. Testei sem a instanciação, e mesmo assim ocorre o salvamento no banco sem problemas.
public void salvar(DadosAberturaConta dadosDaConta) {
var cliente = new Cliente(dadosDaConta.dadosCliente());
var conta = new Conta(dadosDaConta.numero(), cliente);
String sql = "INSERT INTO conta (numero, saldo, cliente_nome, cliente_cpf, cliente_email)" + "VALUES (?, ?, ?, ?, ?)";
try {
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, conta.getNumero());
preparedStatement.setBigDecimal(2, BigDecimal.ZERO);
preparedStatement.setString(3, dadosDaConta.dadosCliente().nome());
preparedStatement.setString(4, dadosDaConta.dadosCliente().cpf());
preparedStatement.setString(5, dadosDaConta.dadosCliente().email());
preparedStatement.execute();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
outro detalhe: não seria melhor em vez de ser de ser preparedStatement.setInt(1, conta.getNumero());
ser preparedStatement.setInt(1, dadosDaConta.numero());
? Qual a diferença?