aprendemos sobre o mapeamento de entidades associadas em hibernar já em tutoriais anteriores, tais como mapeamento de um para um e mapeamento de um para muitos. Lá queríamos salvar a entidade mapeada sempre que a entidade proprietária de relacionamento fosse salva. Para ativar isso, tivemos o atributo “CascadeType”. Neste tutorial de tipos em cascata da JPA, vamos aprender sobre vários tipos de opções disponíveis para cascata via CascadeType.como funcionam os tipos Em Cascata da App?
Antes de seguir em frente, vamos ver como este atributo do tipo cascata é definido no seu código. Vamos ter um exemplo para uma compreensão mais clara. Considere um cenário em que um empregado pode ter várias contas; mas uma conta deve ser associada a apenas um empregado. Vamos criar entidades com informação mínima por uma questão de clareza.emprego.Java
AccountEntity.java
veja a linha a negrito no código fonte acima para EmployeeEntity.java
. Ele define “cascade=CascadeType.ALL
” e significa, fundamentalmente, que qualquer mudança aconteceu no EmployeeEntity
deve cascata para AccountEntity
bem. Se você salvar um empregado, então todas as contas associadas também serão salvos no banco de dados. Se você excluir um empregado, em seguida, todas as contas associadas com esse empregado também ser excluído. É simples.
mas e se apenas quisermos gravar em cascata apenas as operações, mas não excluir a operação. Então precisamos especificá-lo claramente usando o código abaixo.
Agora só quando os métodos save() ou persist() são chamados usando instância de empregado, então apenas as contas serão persistidas. Se qualquer outro método é chamado em sessão, o efeito não afetará/cascata para contas.os tipos em cascata suportados pela arquitetura Java Persistence são os seguintes:
- CascadeType.Persistence: cascade type
presist
means that save() or persist() operations cascade to related entities. - CascadeType.MESCLAR : tipo de cascata
merge
significa que as entidades relacionadas são fundidas quando a entidade proprietária é fundida. - CascadeType.REFRESH: cascade type
refresh
faz a mesma coisa para a operação refresh (). - CascadeType.REMOVE: cascade type
remove
remove todas as entidades relacionadas associadas a esta configuração, quando a entidade proprietária for removida. - CascadeType.DETACH: cascade type
detach
detalha todas as entidades relacionadas Se ocorrer um “desaperto manual”. - CascadeType.TODO : o tipo de cascata
all
é abreviado para todas as operações em cascata acima referidas.
não existe um tipo de cascata padrão na App. Por omissão, nenhuma operação é em cascata.
A configuração em cascata opção aceita uma matriz de CascadeTypes; assim, para incluir apenas atualiza e funde-se na operação em cascata para um um-para-Muitos de relacionamento, como em nosso exemplo, você poderá ver o seguinte:
Acima em cascata irá causar contas de coleta de ser apenas mesclado e atualizada.
hibernar cascata tipos
agora permite entender o que é cascata em hibernar em que cenário o usamos.
para além dos tipos fornecidos pela APP em cascata, existe mais uma operação em cascata no hibernato que não faz parte do conjunto normal acima discutido, chamada “remoção órfã”. Isso remove um objeto de propriedade da base de dados quando ele é removido de sua relação proprietária.vamos entender com um exemplo. No nosso exemplo de entidade de empregado e de conta, actualizei-os como se segue e mencionei “orphanRemoval = true” nas contas. Significa essencialmente que sempre que remover uma “conta do conjunto de contas” (o que significa que estou a remover a relação entre essa conta e o empregado), a entidade da conta que não está associada a nenhum outro empregado na base de dados (ou seja, órfão) também deve ser eliminada.emprego.Java
AccountEntity.java
TestOrphanRemovalCascade.java
é uma maneira muito boa de remover os itens correspondentes/inadequados de uma coleção (ou seja, muitos-para-um ou um-para-muitos relacionamentos). Você apenas remover o item da coleção e hibernar cuidar do resto das coisas para você. Ele irá verificar se a entidade é referenciada de qualquer lugar ou não; se não for, então ele irá excluir a entidade do próprio banco de dados.
deixe-me saber os seus pensamentos e perguntas sobre hibernar 5 tipos de cascata ou JPA tipos de cascata, se houver.feliz aprendizagem !!
Oracle Blog on cascade types