O que CascadeType.REFRESH realmente fazer?
Pergunta
O que o CascadeType.REFRESH
realmente fazer?
A definição para isso é
Quando atualizar uma entidade todas as entidades detidas neste campo atualização também
Mas o que isso significa na prática? Alguém poderia me dar um exemplo simples?
Solução
As descrições CascadeType individuais podem ser um pouco confuso, mas há uma maneira fácil de descobrir isso a partir do caso geral.
Para qualquer um dos valores CascadeType
, isso significa que se X
operação é chamada em uma instância usando a interface EntityManager
, e que instância tem referências a outras instâncias da entidade, e que associação tem CascadeType.X
definido, então a operação EntityManager
também será aplicado a essa entidade associada.
Assim EntityManager.refresh()
é definido como:
Atualize o estado da instância de o banco de dados, mudanças substituindo feita para a entidade, se houver.
Então, se a entidade A tem uma referência a entidade B, e que a referência é anotado com @CascadeType.REFRESH
e EntityManager.refresh(A)
é chamado, então EntityManager.refresh(B)
é implicitamente chamado também.
Outras dicas
Retrieval por Refresh: Dirigido objetos pode ser recarregado a partir do banco de dados usando o método de atualização:
O conteúdo do objeto gerenciado na memória é descartada (incluindo alterações, se houver) e substituído por dados que são recuperados do banco de dados. Isto pode ser útil para garantir que o aplicativo lida com o mais versão atualizada de um objeto de entidade, apenas no caso que poderia ter sido alterado por outro EntityManager desde que foi recuperado.
Fonte: http://www.objectdb.com/java/jpa/persistence/ recuperar