Captura o proximo id do GeneratedValue

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?
}

Agradeço a todos

Eu acredito que só depois de ocorrer a persistência.

public void persist(Object obj) {
  entityManager.persist(objt);
  obj.getId(); //aqui você tem o ID, porém só após o persist()
}

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.

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.

Com uma query native do postgresql vc pode controlar qdo ou nao uma sequence deve ser disparada.