Referência circular em JPA

Olá, estou tentando implementar a construção de um organograma em JPA (implementação toplink), mas estou tendo algumas dificuldades.
Aqui está o código da entidade:

public class ClassificacaoAcesso implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @ManyToOne(optional=false)
    private ClassificacaoAcesso father;
    @OneToMany(mappedBy = "father", fetch=FetchType.LAZY, cascade = {CascadeType.REMOVE}, targetEntity = ClassificacaoAcesso.class)
    private Set<ClassificacaoAcesso> sons;
    private String descricao;

...

Beleza, o mapeamento está correto. Mas quando eu tento remover um elemento que está no meio da árvore, recebo uma mensagem de violamento de constraint. Provavelmente o que está acontecendo é que ele está tentando remover de cima para baixo, mas o que eu precisava era que fosse removido de baixo para cima. Como posso fazer isso?

Obrigado.

Ola Bruno!

faca um caso de teste pra gente ver, no main, e poste a exception

acho que o problema nao eh o que voce falou, pois o banco so vai verificar as constraints na hora do commit, entao nao importa a ordem que o hibernate chamou os DELETEs.

Acho legal colocar um caso de teste mesmo. Já vi problema parecido com o hibernate, mas no caso era a referência do objeto que ainda estava na sessão do hibernate.

Blz Bruno,

desculpa ta respondendo no teu topico, pra pedir ajuda, mas estou com um problema com as anotações das tabelas para poder persistir os dados usando o TopLink, se vc poder dar uma olhada na minha pergunta pra ver se podes me ajudar te agradeço muito. Ja estou tentando arrumar esse problema a um bom tempo e ainda não consegui resolver.

Adonai

Cara, tomei um laço, não consegui executar o meu caso de teste no projeto.
Seguinte, estou usando Netbeans 6.1. Criei meu projeto Web e estou utilizando JPA, como disse. O persistence.xml está configurado direitinho, tudo certo. Quando dou um run no projeto tudo ocorre certo. Mas quando dou um run nos testes recebo o seguinte erro:

Testcase: testAtualizar(br.com.focu.controleacesso.db.ClassificacaoControllerTest):	Caused an ERROR
No resource files named META-INF/services/javax.persistence.spi.PersistenceProvider were found. Please make sure that the persistence provider jar file is in your classpath.
javax.persistence.PersistenceException: No resource files named META-INF/services/javax.persistence.spi.PersistenceProvider were found. Please make sure that the persistence provider jar file is in your classpath.
        at javax.persistence.Persistence.findAllProviders(Persistence.java:167)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:103)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)
        at br.com.focu.controleacesso.db.JPAUtilTest.getEntityManager(JPAUtilTest.java:39)
        at br.com.focu.controleacesso.db.ClassificacaoController.update(ClassificacaoController.java:54)
        at br.com.focu.controleacesso.db.ClassificacaoControllerTest.testAtualizar(ClassificacaoControllerTest.java:90)

O que me parece é que ele não adiciona o classpath do projeto para o run dos testes, mas na configuração está como se ele estivesse adicionando.
Alguem sabe como resolver?

Obrigado.