Interface generica para Dao independende de tecnologia

Olá a todos.

Estou com uma dificuldade em criar uma interface para meu dao que, em suas assinaturas de metodos, não fique explicitado a tecnologia que o dao utilizará para a persistencia.

Minha atual interface está assim:

public interface DaoGenerico<T, ID extends Serializable> { public Class<T> getObjectClass(); public T salvar(T object); public T atualizar(T object); public void excluir(T object); public List<T> todos(); public T pesquisarPorId(ID id); public T pesqParam(String query, Map<String, Object> params); public List<T> listPesq(String query); public List<T> listPesqParam(String query, Map<String, Object> params); public List<T> listPesqParam(String query, Map<String, Object> params, int maximo, int atual); }

Notem os 4 ultimos metodos. Eles recebem uma string com a query (pode ser sql/hql/jpql) ou o nome da query, caso estejamos usando named query/stored procedure…

Eu queria algo que se ajuste de acordo com a tecnologia que será usada na persistencia dentro do dao, e eu não sei se dessa forma eu consigo fazer isso. O que eu não quero, é criar metodos especificos no dao de acordo com a necessidade da entidade. QUero um dao que consiga fazer qualquer tipo de busca, atraves de metodos de busca que podem ou não receber parametros…

Existe uma forma em que eu possa definir APENAS os nomes dos metodos, sem definir os tipos e quantidades de parametro? Principalmente os tipos…

Por exemplo, um HibernateDaoImpl que implemente a interface DaoGenerico, no metodo “public List listPesq(String query);” em vez de receber um String, passasse a receber uma Criteria, ou Query…

Será que consegui mostrar minha ideia?

Obrigado pela atenção.

Felipe.