Teria com antes de persistir um objeto, recuperar o id que será sua chave?
Assim
Pessoa pessoa = new Pessoa("Alguem");
// Aqui tem os DAOs e Os Services e COnfiguraçõs e tao...
DAO dao = Service.getDAO(Pessoa.class);
dao.persit(pessoa);
// E no metodo do DAO
public void persist(Object obj){
entityManeger.persist(obj);// Teria como recupera o id neste momento, mas antes do metodos realizar a persistencia?
}
Caso o seu campo seja um auto-incremento vc faria uma HQL para retornar o maior registro usando a clásula MAX, entao vc teria como saber o proximo id somando mais 1(um). antes de persistir.
Mas e se nesse meio tempo, um novo registro foi persistido?? Por isso eu digo, tem que fazer um bom controle de concorrência ai.[/quote]
Concordo, ah esse “problema” num sequence, pois assim q invocado ele consome uma posicao. Mas eh soh uma dica, teria como controlar isso como uma query native mas nao vem ao caso, pois se ele mudasse a base de dados teria fazer outro tratamento soh para atender a nova base.
Uma query nativa também não resolve. A questão é concorrencia. Para usar essa idéia, deve fazer um lock na tabela antes do SELECT e só libera-la após persistir os dados.