Estou tendo problemas para excluir nós órfãos usando JPA com o seguinte mapeamento
@OneToMany (cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "owner")
private List<Bikes> bikes;
Estou tendo o problema das funções órfãs penduradas no banco de dados.
Posso usar a org.hibernate.annotations.Cascade
tag específica Hibernate da anotação, mas obviamente não quero vincular minha solução a uma implementação Hibernate.
EDIT : Parece que o JPA 2.0 incluirá suporte para isso.
Se você estiver usando o JPA 2.0, agora poderá usar o
orphanRemoval=true
atributo da@xxxToMany
anotação para remover órfãos.Na verdade,
CascadeType.DELETE_ORPHAN
foi preterido na versão 3.5.2-Final.fonte
fonte
cascade = CascadeType.ALL, orphanRemoval = false
e excluir os pais? Ele excluirá os filhos, mesmo que eu tenha dito especificamente para NÃO?Se você estiver usando o JPA com o EclipseLink, precisará definir a anotação @PrivateOwned .
Documentation: Eclipse Wiki - Usando extensões JPA do EclipseLink - Capítulo 1.4 Como usar a anotação @PrivateOwned
fonte
você pode usar o @PrivateOwned para excluir órfãos, por exemplo
fonte
Acabei de encontrar esta solução, mas no meu caso, não funciona:
orphanRemoval = true não tem efeito.
fonte
De acordo com o Java Persistence with Hibernate , a exclusão órfã em cascata não está disponível como uma anotação JPA.
Também não é suportado no JPA XML.
fonte
Eu tive o mesmo problema e me perguntei por que essa condição abaixo não excluiu os órfãos. A lista de pratos não foi excluída no Hibernate (5.0.3.Final) quando eu executei uma consulta de exclusão nomeada:
Então lembrei que não devo usar uma consulta de exclusão nomeada , mas o EntityManager. Como usei o
EntityManager.find(...)
método para buscar a entidade eEntityManager.remove(...)
excluí-la, os pratos também foram excluídos.fonte
Apenas
@OneToMany(cascade = CascadeType.ALL, mappedBy = "xxx", fetch = FetchType.LAZY, orphanRemoval = true)
.Remova targetEntity = MyClass.class , funciona muito bem.
fonte
Para os registros, no OpenJPA anterior ao JPA2, era @ElementDependant.
fonte
Eu estava usando o mapeamento individual, mas o filho não estava sendo excluído O JPA estava violando a chave estrangeira
Depois de usar orphanRemoval = true, o problema foi resolvido
fonte