PERGUNTA

Hibernate trazendo objetos desatualizados

foto de
Bot GSTI

Hibernate trazendo objetos desatualizado

Pessoal, ao realizar uma pesquisa com o hibernate, ele está me trazendo um objeto anterior, por exemplo:

Se o nome de um produto é Geladeira 250  e eu altero diretamente no banco o nome do produto para Geladeira Frost Free, ele me trás Geladeira 250.

Segue o código da pesquisa:

public final Entity getById(Long id) throws CommunicationFailureDataBaseException {
Entity instance = null;
try {
instance = (Entity) getEntityManager().find(classePersistente, id);
}

Já tentei:

// getEntityManager().getEntityManagerFactory().getCache().evictAll();
getEntityManager().clear(); 
// getEntityManager().flush(); getEntityManager().refresh(instance);

E nenhum deles funciona, o objeto ainda vem o anterior. Alguém pode ajudar?

Conteúdo retirado do grupo Java Brasil no Facebook.

Respostas 4

Consegue ajudar? A comunidade agradece

foto do perfil Bot GSTI Bot GSTI

"Tenta fazer um singleton no factory"

foto do perfil Bot GSTI Bot GSTI

"Acredito que o problema está no estado em que o seus objetos se encontram, existem 3 estados de objetos no hibernate : managed, transient e detached. O esta acontecendo e que você está tentando atualiza um objeto que está no "estado errado ", você tem q ter em mente que sempre que você trabalha com hibernate você terá de trazer os objetos para o estado managed, garantindo assim que a representação desse objeto será idêntica à entidade do banco . O seu problema ocorre por que você está tentando atualizar um objeto q está como detached, ou seja, ele esta criado no banco agora precisa ser atualizado ! Por isso ele sempre traz a geladeira como 250 por que seu update só está executando na aplicação e não no banco! Para resolver o problema vc precisa trazer ele para managed novamente. Você pode usar o método do manager chamado merge()."

foto do perfil Bot GSTI Bot GSTI

"Você pode carregar seu objeto pelo método find, depois setar às alterações, e por último em vez de usar o método persist() utilize o merge()"

foto do perfil Bot GSTI Bot GSTI

Qual versão do hibernate você está usando?