Olá caro softwork.
Primeiramente agradeço pela colaboração.
Pelo conteúdo de sua resposta suponho que o hibernate não possua suporte para o que estou precisando. Para ele não fornecer tal suporte, significa, pelo visto, que utilizar esta estratégia para gerar a chave primária de uma tabela é algo muito errado. Nunca usei isso, sempre deixei isso para o banco fazer, no entanto, como já mencionei, a base de dados é legada.
Pensei algumas formas para resolver o problema. Pensei em adicionar um sequência no postgres para isso, mas o problema é que tem outro sistema que usa a mesma base(estamos reescrevendo este sistema) que seria prejudicado. Logo, não posso realizar isso. Segunda, a que acho mais adequada até o momento, seria extender o hibernate e criar o generator para isto. Ainda não sei o quanto é viável fazer isso.
Estou usando também spring e jsf na aplicação. Não utilizo diretamente a api do hibernate, utilizo a api do spring para trabalhar com o hibernate(classe HibernateTemplate).
Não tenho um Dao genérico, tenho um repositório genérico, para não entrar na discussão sobre as diferenças entre os dois digo, simplesmente, que para este caso não existe muita distinção.
Então poderia fazer isso sim.
public interface BasicRepository<T extends Serializable> {
public T get(Serializable id);
public Collection<T> getAll();
public void add(T entity);
public void addAll(Collection<T> entities);
public void remove(T entity);
public void removeAll(Collection<T> entities);
}
Na implementação de add, posso executar a lógica para obter o id, mas para isso, eu criaria uma outra interface. E teria o problema de que algumas entidades teriam seu id gerado automaticamente outras não, como o repositório é genérico, teria que colocar este método em uma implementação do repositório para a entidade(“Documento”) da tabela do banco(“documento”). Para falar a verdade, no repositório não deve existir a idéia de id de uma tabela do banco de dados. Isso é abstraído. Enfim… não ficaria muito interessante a nível conceitual e para a arquitetura.
Vou tentar extender o hibernate, posto o resultado aqui quando terminar.