Composição de DAO's

galera, to com uma dúvida aqui

Digamos que eu tenha uma classe Lista, que possui um histórico das alterações que ocorreram nela

public class Lista {
    //algumas variáveis de instância
    private Long id;
    private Historico historico;
}

public class Historico {
   private Long id;
   private String tipoAcao;
}

E eu tenho o DAO dessa lista

public class ListaDAO {
    private Connection connection;

    public void add(Lista lista) {
       String sql = "INSERT INTO LISTA VALUES (?, ?)";
       PreparedStatement ps = connection.prepareStatement(sql);
       ps.setString(1, "bla"); ps.setString(2, "ble");
       ps.executeUpdate();
    }
}

minha dúvida é: na hora de salvar o Histórico, eu devo colocar a implementação no método add do ListaDAO, como a seguir:

public void add(Lista lista) {
       String sql = "INSERT INTO LISTA VALUES (?, ?)";
       PreparedStatement ps = connection.prepareStatement(sql);
       ps.setString(1, "bla"); ps.setString(2, "ble");
       ps.executeUpdate();

       String sqlHist = "INSERT INTO HISTORICO VALUES(?)";
       PreparedStatement psHist = connection.prepareStatement(psHist);
       psHist.setString(1, "bla"); psHist.setString(2, "ble");
       psHist.executeUpdate();
}

ou devo devo delegar essa tarefa para o HistoricoDAO?

public void add(Lista lista) {
       String sql = "INSERT INTO LISTA VALUES (?, ?)";
       PreparedStatement ps = connection.prepareStatement(sql);
       ps.setString(1, "bla"); ps.setString(2, "ble");
       ps.executeUpdate();

       historicoDAO.add(lista.getHistorico());
}

eu prefiro fazer o segundo, mas aí entra uma dúvida minha:
minhas tabelas são assim:

____________                             _____________
     Lista                                            Historico
____________                             _____________
id                                                id_lista
____________                             tipoAcao
                                                  ______________

Sendo que o id_lista na tabela Histórico é uma foreign key para a tabela Lista

Voltando ao código, no meu método em HistoricoDAO

public void add(Historico historico) {
    //implementação do método
}

eu vou precisar do id da lista, mas a classe Historico não possui uma referência para a classe Lista
como eu faço então? assim?
classe HistoricoDAO:

public void add(Lista lista,Historico historico) {
//implementação do método
}

mas me parece meio estranho assim, posso estar errado
o que eu quero saber é: o que vocês costumam fazer nessa situação?
desculpem o post longo, mas é uma dúvida que tem aparecido com frequência pra mim, e eu estava precisando descobrir o que fazer

Se vc esta usando o hibernate seus problemas acabaram…rss

Na verdade eu sugiro a mesma idéia dos criadores do framework…seu método add ao invés de ser void…poderia ser Long…e retornaria o ID da lista salva…

Concordo que o Histórico deve ter seu prórpio DAO para evitarmos acoplamento fortes.

na prática seria:


public Long add(Lista lista){

//implementações do método
//mais alguns código q te recuperem o ID salvo para o registro atual (vai depender do banco q vc esta usando)

}

entendeu a idéia ???

Cara, já pensou em utilizar o Hibernate ou alguma outra ferramenta ORM???

fazer o mapeamento objeto-relacional na mão é sempre insano… não vale a pena fazer, pois já existe pronto e bom

não reinvente a roda!!!

infelizmente nesse projeto eu não vou poder utilizar hibernate, vai ter que ser via jdbc mesmo

Giulliano, mas como vc propõe que seja o método add de HistoricoDAO entao?

Algo como add(Lista lista, Historico historico) mesmo?