hibernar fundindo e refrescando entidades

no tutorial anterior, aprendemos sobre salvar entidades usando save() ou saveOrUpdate() métodos em hibernar. Lá aprendemos que na maioria dos casos, você não vai mesmo precisar desses métodos como hibernate gerencia as atualizações em entidades persistentes automaticamente. Você só precisa se preocupar com objetos transitórios na maioria dos casos. Neste tutorial, estou discutindo alguns pensamentos em torno do método refresh() e merge() presente na classe sessão hibernada.

refrescando entidades hibernadas usando o método refresh ()

às vezes enfrentamos a situação em que a nossa base de dados de aplicação é modificada com alguma aplicação/agente externo e, portanto, a entidade hibernada correspondente na sua aplicação torna-se realmente fora de sincronia com a representação da sua base de dados, ou seja, ter dados antigos. Neste caso, você pode usar o método session.refresh() para re-povoar a entidade com os dados mais recentes disponíveis na base de dados.

pode utilizar um dos métodos de actualização() na interface de sessão para actualizar uma instância de um objecto persistente, como se segue:

public void refresh(Object object) throws HibernateExceptionpublic void refresh(Object object, LockMode lockMode) throws HibernateException

estes métodos irão reler as propriedades do objecto a partir da base de dados, sobrepondo-as. Em aplicações da vida real, você não tem que usar o método refresh() muitas vezes, além do cenário acima indicado.

vamos olhar para um exemplo do método refresh ().

Veja acima das linhas destacadas.

  • linha 15 salvar o empregado com o primeiro nome “Lokesh”
  • linha 26 definir o primeiro nome “Vikas”. Como a entidade é destacada, DB não será atualizada.
  • linha 27 actualizar a entidade com base de dados utilizando o método refresh().
  • Linha 32 verificar que o primeiro nome definido na entidade foi atualizado com “Lokesh”, pois é o que banco de dados tem este momento.

isto foi tudo sobre o método refresh. Vamos procurar outro método similar merge().

fundir entidades hibernadas utilizando o método merge ()

o método merge() faz exactamente o contrário do que o refresh() faz, ou seja, actualiza a base de dados com valores de uma entidade separada. O método de atualização foi atualizar a entidade com as últimas informações do banco de dados. Então, basicamente, ambos são exatamente opostos.

a fusão é realizada quando você deseja que uma entidade separada seja mudada para o estado persistente novamente, com as alterações da entidade destacada migrando para (ou anulando) a base de dados. As assinaturas do método para as operações de junção são:

Object merge(Object object)Object merge(String entityName, Object object)

a documentação oficial do hibernar dá uma explicação muito boa do método merge():

copiar o estado do objecto dado para o objecto persistente com o mesmo identificador. Se não houver nenhuma instância persistente associada à sessão, ela será carregada. Devolve a instância persistente. Se a instância dada não for gravada, salve uma cópia e retorne-a como uma instância recentemente persistente. A instância dada não fica associada à sessão. Esta operação cascata para instâncias associadas se a associação for mapeada com cascade= “merge”.

assim, se eu tomar abaixo o código, por exemplo, em seguida, abaixo os pontos listados deve ser claro para você.

EmployeeEntity mergedEmpEntity = session.merge(empEntity);
  • ‘empEntity’ é uma entidade separada quando é passada para o método merge ().
  • merge () method will search for an already loaded Employee entrance instance with identifier information taken from empEntity. Se essa entidade persistente for encontrada, então ela será usada para atualizações. De outro modo, é introduzida uma nova entidade empregadora na sessão, utilizando a mesma informação identificadora que está presente em “empEntity”.
  • os dados são copiados de’ empEntity ‘ para uma nova entidade encontrada/carregada.
  • porque a nova entidade / encontrada é persistente, todos os dados copiados para ela a partir de ‘empEntity’ é automaticamente salvo na base de dados.
  • a referência dessa nova entidade é devolvida do método merge() e é atribuída à variável “mergedEmpEntity”.
  • “empEntity” é ainda uma entidade separada.

in above example, ‘mergedPersistentEmpEntity’ is new entity which is persistent. Então, se você quiser mudar mais, então faça em instância de “empentência de estado”.

isto é tudo para este tutorial cobrindo merge() e refresh() métodos em hibernado. Lembre-se que a pergunta pode ser feita como diferença entre merge() e refresh(), ou diferença entre merge() e load() etc. Esteja pronto para encontrar qualquer diferença entre perguntas de entrevista.Feliz Aprendizagem !!

este post foi útil?

avise-nos se gostou do post. Só assim podemos melhorar.
Sim
Não

no tutorial anterior, aprendemos sobre salvar entidades usando save() ou saveOrUpdate() métodos em hibernar. Lá aprendemos que na maioria dos casos, você não vai mesmo precisar desses métodos como hibernate gerencia as atualizações em entidades persistentes automaticamente. Você só precisa se preocupar com objetos transitórios na maioria dos casos. Neste tutorial, estou discutindo alguns pensamentos…

no tutorial anterior, aprendemos sobre salvar entidades usando save() ou saveOrUpdate() métodos em hibernar. Lá aprendemos que na maioria dos casos, você não vai mesmo precisar desses métodos como hibernate gerencia as atualizações em entidades persistentes automaticamente. Você só precisa se preocupar com objetos transitórios na maioria dos casos. Neste tutorial, estou discutindo alguns pensamentos…

Deixe uma resposta

O seu endereço de email não será publicado.