Pessoal,
Estou aqui no site pesquisando sobre DAO Generico e me deparei com uma dúvida.
Primeiramente, tenho as classes:
class Pessoa {
//atributos
}
class PessoaFisica extends Pessoa {
//atributos
}
class PessoaJuridica extends Pessoa {
//atributos
}
E tenho meu GenericDAO feito conforme já discutido varias vezes aqui:
public interface GenericDAO<T, PK extends Serializable> {
public Class getObjectClass();
public T save(T object);
public T load(PK primaryKey);
public T get(PK primaryKey);
public List listAll();
public List findByExample(final T example);
public T findOneByExample(final T example);
public List listAll(final int first,final int max);
public int listAllPageCount();
public List findByExample(final T example,final int first,final int max);
public int findByExamplePageCount(final T example);
public void update(T object);
public void delete(T object);
public void rebind(T object);
}
ai tenho a problematica da herança:
class PessoaDAO extends GenericDAO<Pessoa, Integer>() {}
class PessoaFisicaDAO extends PessoaDAO() {
//metodos especificos
}
class PessoaJuridicaDAO extends PessoaDAO() {
//metodos especificos
}
Por fim, para usar, seria algo como:
PessoaDAO pDAO = DAOFactory.getInstance().getDAO(PessoaDAO.class);
Pessoa p = new Pessoa();
pDAO.save(p);
Até aqui tudo bem, pois o generics me retornaria uma pessoa e os metodos do GenericDAO estariam aptos a receber Pessoa.
Contudo, se eu precisasse atualizar PessoaFisica ?
PessoaFisicaDAO pfDAO = DAOFactory.getInstance().getDAO(PessoaFisicaDAO.class);
PessoaFisica pf = new PessoaFisica();
pfDAO.save(pf);
o Metodo save estaria esperando uma Pessoa e não PessoaFisica.
Alguém sabe como resolver isso?
Grato