O CascadeType é uma maneira de definir a forma como serão propagadas as operações em cascata de uma Entity para suas referencias. A vantagem do Cascade é a propagação automaticamente da ação configurada nos relacionamentos da entidade.
Tipos:
- CascadeType.PERSIST– disparado toda vez que uma nova entity for inserida no banco de dados pelo comando entityManager.persist();
- CascadeType.DETACH – disparado toda vez que uma entity é retirada do Persistence Context. Comandos que podem disparar essa ação: entityManager.detach(), entityManager.clear(). Ocorrerá um detach também quando o Persistence Context deixar de existir;
- CascadeType.MERGE – disparado toda vez que uma alteração é executada em uma entity. Essa alteração pode acontecer ao final de uma transação com a qual uma managed Entity foi alterada (4.2), ou pelo comando entityManager.merge();
- CascadeType.REFRESH – disparada quando uma entity for atualizada com informações no banco de dados. Comando: entityManager.refresh();
- CascadeType.REMOVE – disparado quando uma entity é removida (apagada) do banco de dados, os relacionamentos marcados também serão eliminados O comando utilizado é o entityManager.remove();
- CascadeType.ALL – todos os eventos anteriores serão sempre refletidos nas Entities relacionadas.
Exemplo para setar apenas um tipo de Cascade:
@OneToMany(cascade = CascadeType.ALL)
private List usuarios;
Exemplo para setar um ou mais tipos, (porém não todos):
@OneToMany(cascade ={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE })
private List usuarios;
Observações sobre o Cascade:
- É preciso ter bastante cuidado ao anotar um relacionamento com CascadeType.ALL. Uma vez que se a entidade fosse removida o seu relacionamento também seria removido do banco de dados.
- CascadeType.ALL (ou opções únicas) pode causar lentidão em todas as ações realizadas na entidade. Caso a entidade tenha muitas listas um merge() poderia causar todas as listas a receberem merge().
Se eu deixar sem ele fica default, ou seja, sem essas operações?
ResponderExcluirSe não colocar não vai acontecer nenhuma dessas operaçoes
Excluir