Erro Cannot delete or update a parent row: a foreign key constraint fails

Boa noite pessoal, tudo bem ?

Estou fazendo um mapeamento usando hibernate com a seguinte relação.

@Table(name="tratamento")
public class Tratamento extends Entidade{
	
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;
	
        @OneToOne(fetch=FetchType.LAZY, cascade = CascadeType.MERGE)
	@ForeignKey(name="FK_TRATAMENTO_FUNCIONARIO")
	private Funcionario funcionario;
}

A Outra tabela é :


@Table(name="funcionario")
public class Funcionario extends Entidade{

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;
	
	@OneToOne(fetch=FetchType.LAZY, cascade=CascadeType.ALL, optional=false)
	@ForeignKey(name="FK_FUNCIONARIO_PESSOA")
	private Pessoa pessoa;

Quando eu mandou exluir um TRATAMENTO elança a seguinte exception :

Cannot delete or update a parent row: a foreign key constraint fails (demo.dia, CONSTRAINT FK_DIA_FUNCIONARIO FOREIGN KEY (funcionario_id) REFERENCES funcionario (id))
2013-04-01 22:01:27 ERROR [http-bio-8080-exec-10] (AbstractFlushingEventListener.java:324) - Could not synchronize database state with session

Pelo visto ele está tentando excluir o FUNCIONÁRIO… como resolver isso ?

[quote=joaquimbarros]Cannot delete or update a parent row: a foreign key constraint fails (demo.dia, CONSTRAINT FK_DIA_FUNCIONARIO FOREIGN KEY (funcionario_id) REFERENCES funcionario (id))
2013-04-01 22:01:27 ERROR [http-bio-8080-exec-10] (AbstractFlushingEventListener.java:324) - Could not synchronize database state with session

Pelo visto ele está tentando excluir o FUNCIONÁRIO… como resolver isso ?[/quote]Como você chegou a essa conclusão?

Pelo que parece, alguem aí tem chave com outra pessoa. Ao tenta excluir o banco de dados vai falar que um registro está dependendo do outro…

Certo… Existe sim uma relação de funcionário com outra tabela, mas nesse caso ai, eu só precisaria excluir a referência da tabela TRATAMENTO.
O mapeamento está errado?

[quote=joaquimbarros]Certo… Existe sim uma relação de funcionário com outra tabela, mas nesse caso ai, eu só precisaria excluir a referência da tabela TRATAMENTO.
O mapeamento está errado?

[/quote]Sim. Marque uma classe como classe dependente. Caso o relacionamento seja bidirecional é necessário remover os relacionamentos pelo Java.

a.setB(null); b.setA(null); remove(b);Esse post te ajudará: http://uaihebert.com/?p=1596

Mesmo fazendo isso não resolve… continua dando o mesmo erro. Como se ele estivesse com um cascade all.

verifique se existe funcionario X na classe Tratamento, possivelmente para voce remover esse funcionario, precisara remove-lo tambem da tabela tratamento.

O que eu to querendo fazer é remover somente o TRATAMENTO e não o registro da tabela FUNCIONARIO.
Inclusive eu já setei null no campo funcionario_id, mas mesmo assim ele continua pegando a referencia.

Alguemmm ?

Galera … Resolvido … O problema não estava nessa classe, e sim numa outra classe que estava associada a Funcionário e estava como cascadeAll.
Obrigado a todos que ajudaram…
Abrços