JPA - getResultList() não retorna dados atualizados

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

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

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

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

Algo como:

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

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+

“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!

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

//...
} finally {
   genericDaoJpa.close();
}