JPA - getResultList() não retorna dados atualizados

6 respostas
O

Primeira participação no forum… Me desculpem se essa dúvida já foi discutida em outra ocasião, mas procurei pelo forum e não encontrei nada…

A questão é a seguinte…

Possuo uma entidade com autorelacionamento, e quando eu insiro um novo nó que não na raiz, o Hibernate não está trazendo este novo nó.

Vamos ao código…

Primeiro eu crio o objeto que pretendo inserir:

public void actionCriarContaN2() {
		centroCusto = new CentroCusto();
		centroCusto.setNivelAntCencus(centroCustoAuxN1);
		centroCusto.setEmpresaCencus(getEmpresa());
	}

Neste caso, centroCustoAuxN1 é o pai…

Então, faço a inclusao do registro:

public String actionInserirElemento() {
		try {
			ctlCentroCusto.inserirElemento(centroCusto);
		} catch (Exception e) {
	.
	.
	.
	}

O métdo inserirElemento() chama o método persist() da minha entityManager…

Até aí tudo bem. O registro é inserido e eu consigo vê-lo no banco.
O problema é que quando eu busco novamente os registros a partir da raiz, este novo nó não é retornado, a não ser que eu encerre a sessão e inicie outra. Me parece que o Hibernate utiliza um cache que verifica se estou executando uma busca que já foi feita na mesma sessão e me retorna o cache, não busca novamente no banco.

Como posso resolver isso? Ou então, será que não tô fazendo alguma besteira? Será? Será?

6 Respostas

G

Para garantir que sua lista esteja atualizada, você pode dar um entityManager.flush(); após seu persist()

O

Pô, valeu a tentativa aí, mas não rolou…

Marky.Vasconcelos

Voce tem certeza que voce está enviando para o banco?

Algo como:

Transaction t = session.beginTransaction();
//Salva  que tem que salvar
t.commit();
O

Pior que sim…

public void inserirElemento(T elemento) throws Exception {
		try {
			genericDaoJpa.beginTransaction();
			genericDaoJpa.persist(elemento);
			genericDaoJpa.commit();
		} catch(Exception e) {
			genericDaoJpa.rollback();
			throw e;
		}
	}

E eu também consigo ver o registro no banco se fizer um select direto pelo sql+

O

“Pogueei” na parada e funcionou!!

Dei um refresh no pai e resolveu o problema…

Só não sei quanto gambiarra é isso.

Valeu a galera que ajudou aí…

Abraço!

V

No seu método vc poderia adicionar a seguinte linha de código no bloco “finally”

//...
} finally {
   genericDaoJpa.close();
}
Criado 21 de outubro de 2008
Ultima resposta 23 de out. de 2008
Respostas 6
Participantes 4