estou com uma dúvida.
Meu hibernate esta atualiza um bean mesmo sem eu pedir explicitamente para esse bean ser atualizado.
por exemplo:
Criei um interceptador e antes de iniciar a action eu abro uma transação e após a action eu fecho a transação!
entretanto quando altera o dado de um bean e não faço o commit ele mesmo assim esta alterando no banco!
pq ?
Nunca tentei fazer isso. Claro, uma hipótese seria vc “reload” os beans A e C, mas não é o melhor, né?
Tem como deixar uma entidade “detached” na mão?
Jair_Rillo_Junior
Esse é o comportamento padrão do ORM quando está dentro de uma transação. Se ele vê que a sua entidade foi alterada em memória, ele irá persistir essas alterações no banco de dados. O mesmo ocorre com JPA.
CintiaDR
Quer dizer que o “update” é redundante?
Vc podia me passar documentação sobre isso?
viniciuspadua
como faço para deixar a entidade detached e depois mudar para managed?
CintiaDR
Vinícius,
Entrei com nenhuma dúvida nesse tópico e saí com umas 5… :oops:
viniciuspadua
eu descobri por acaso isso.
como uso muito o .trim() em todo get() de string estou conferindo se ocorre vários update.
se for o desempenho cairá demais!
Jair_Rillo_Junior
Você não consegue deixar apenas 1 objeto detached. Você pode fechar a sessão e todos os objetos “pendurados” nessa sessão ficarão detached.
Para voltar managed, você pode usar o método merge() do Hibernate.
Cinthia
No site oficial do Hibernate deve ter algo falando sobre isso. O trabalho do hibernate é manter os objetos em memória (managed) igual os dados persistidos. Não pense no hibernate como um simples framework de persistência que você chama save(), update(), delete e ele vai fazer as ações no banco de dados SÓ NESSE INSTANTE. No google deve ter algo a mais comentando a respeito
Jair_Rillo_Junior
viniciuspadua:
eu descobri por acaso isso.
como uso muito o .trim() em todo get() de string estou conferindo se ocorre vários update.
se for o desempenho cairá demais!
Se o conteúdo for modificado e o objeto managed, o Hibernate vai fazer um update por trás dos panos sim.
É igual quando você trabalha com objetos one-to-many. Supondo que você tem um objeto estado e nele tem uma lista de cidades. Você carregou o objeto estado e quer excluir todas as cidades. Para fazer isso, simplesmente faça via objeto
objetoEstado.getListaCidades().clear();
Por trás dos panos vai acontecer o delete
CintiaDR
Jair,
estou procurando agorinha mesmo sobre isso, mas decerto não estou conseguindo palavras chaves concisas o suficiente.
Meu ponto unicamente era unicamente para que serviria o update, já que o hibernate salva os “managed objects” modificados automaticamente. Acho que a resposta é essa: