Teria com antes de persistir um objeto, recuperar o id que será sua chave?
Assim
Pessoapessoa=newPessoa("Alguem");// Aqui tem os DAOs e Os Services e COnfiguraçõs e tao...DAOdao=Service.getDAO(Pessoa.class);dao.persit(pessoa);// E no metodo do DAOpublicvoidpersist(Objectobj){entityManeger.persist(obj);// Teria como recupera o id neste momento, mas antes do metodos realizar a persistencia?}
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()
}
E
ebarros
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.
Jair_Rillo_Junior
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.
E
ebarros
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.
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.
Jair_Rillo_Junior
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.
E
ebarros
Com uma query native do postgresql vc pode controlar qdo ou nao uma sequence deve ser disparada.