Resolvido Remover orfãos com Hibernate

5 respostas
VandersonAssis

Como faço isso?
Exemplo:
Tenho uma entidade chamada “Atividade”, que possui uma foreign key de outra entidade chamada “Usuario”. Como faço pra quando eu remover um usuario a atividade relacionada à ele seja removida automaticamente? Pesquisando no google cheguei ao código abaixo, mas quando tento deletar um usuário da o erro de “query não pôde ser executada pois viola restrição de chave estrangeira na tabela atividade”. Ou seja ela não está sendo removida como deveria usando o “orphanRemoval=true” do código abaixo.

Usuario

@OneToOne(mappedBy="usuario", orphanRemoval=true)
private TbAtividade atividade;

Atividade

@OneToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
public TbUsuario usuario;

Alguém sabe me dizer onde errei?

Obrigado!

5 Respostas

Hebert_Coelho

Se você retirar o orphanRemoval=true e remover um usuário, você vai ter o erro?

VandersonAssis

Da o mesmo erro que está dando com o “orphanRemoval=true” =/

Hebert_Coelho

Da o mesmo erro que está dando com o “orphanRemoval=true” =/Você pode recriar essas colunas no db?
Ou não? Se sim, recrie e tente.

WRYEL

Você está fazendo a remoção de usuário pelo EntityManager ou por JPAQL/Query ?

Se você está fazendo ele pelo EntityManager tanto CascadeType.ALL quanto CascadeType.REMOVE ou orphanRemoval=true deveria resolver seu problema.

Se estiver fazendo por JPAQL/Query, elas não propagan o cascade das config automaticamente, tendo você que fazelos na mão …

Outro detalhe a se preocupar é SE seu Usuario nas regras de negócio é OneToOne com Atividade, ou, ManyToOne (as vezes uma atividade pode ser de mais de um usuário e não faria sentido um orphanRemoval).

edit: coloca stacktrace pra gente :slight_smile:

VandersonAssis

Consegui! Valeu pessoal pela ajuda.
O erro é que ao invés de eu usar o método delete do “org.hibernate.Session” eu estava usando HQL!

Obrigado!

Criado 24 de julho de 2012
Ultima resposta 24 de jul. de 2012
Respostas 5
Participantes 3