Problema com FK

Boa noite a todos.
Estou com um problema, tenho cadastro de procedimentos onde gravo o tipo que vem de um tablela tipoProcedimento, nohora de salvar ele da o seguinte

java.lang.RuntimeException: java.sql.SQLException: ORA-02291: restrição de integridade (SINTHOS.FK_PROCEDIMENTO) violada - chave mãe não localizada
Query: INSERT INTO SINTHOS.PROCEDIMENTO(CODIGOPROCEDIMENTO,DESCRICAO,VALOR,CODIGOTIPOPROCEDIMENTO)
VALUES
(4,‘procedimento 4’,4.4,0) Parameters: []

tenho a classe bean de procedimento

[code]package sinthos.bean;

import java.util.List;

import sinthos.dao.TipoProcedimentoDAO;

public class Procedimento {
private int codigoProcedimento;
private String descricao;
private double valor;
private List listaProcedimento;
//Chave estrangeira TipoProcedimento
private TipoProcedimento tipoProcedimento;
private int codigoTipoProcedimento;

public Procedimento(){}

public int getCodigoProcedimento() {
	return codigoProcedimento;
}
public void setCodigoProcedimento(int codigoProcedimento) {
	this.codigoProcedimento = codigoProcedimento;
}
public String getDescricao() {
	return descricao;
}
public void setDescricao(String descricao) {
	this.descricao = descricao;
}
public double getValor() {
	return valor;
}
public void setValor(double valor) {
	this.valor = valor;
}
public List<Procedimento> getListaProcedimento() {
	return listaProcedimento;
}
public void setListaProcedimento(List<Procedimento> listaProcedimento) {
	this.listaProcedimento = listaProcedimento;
}
public TipoProcedimento getTipoProcedimento(){
	return tipoProcedimento;
}
public void setTipoProcedimento(TipoProcedimento tipoProcedimento){
	this.tipoProcedimento = tipoProcedimento;
}
public int getCodigoTipoProcedimento() {
	return codigoTipoProcedimento;
}
public void setCodigoTipoProcedimento(int codigoTipoProcedimento) {
	this.codigoTipoProcedimento = codigoTipoProcedimento;
	TipoProcedimentoDAO daoTipoProcedimento = new TipoProcedimentoDAO();
	this.setTipoProcedimento(daoTipoProcedimento.getTipoProcedimentoPorCodigo(codigoTipoProcedimento));
}

}
[/code]

A classe DAO

[code]package sinthos.dao;

import java.util.List;

import org.boxsql.BoxSQL;

import sinthos.bean.Procedimento;

public class ProcedimentoDAO {

public ProcedimentoDAO(){}

//Método responsável por salvar 
public Procedimento salvarProcedimento(Procedimento procedimento){
	Procedimento procedimentoSalvo = null;
	BoxSQL box = new BoxSQL();
	box.setParameter("CODIGOPROCEDIMENTO", procedimento.getCodigoProcedimento());
	try{
		procedimentoSalvo = (Procedimento) box.getObject("procedimentoPorCodigo.sql", Procedimento.class);
		if(procedimentoSalvo == null){
			box.executeUpdate("cadastrarProcedimento.sql", procedimento);
		}else{
			box.executeUpdate("alterarProcedimento.sql", procedimento);
		}
		procedimentoSalvo = (Procedimento) box.getObject("procedimentoGetPorCodigo.sql", Procedimento.class);
	}finally{
		box.release();
	}
	return procedimentoSalvo;
}
//Método responsável por excluir 
public void excluirProcedimento(int codigoProcedimento){
	BoxSQL box = new BoxSQL();
	box.setParameter("CODIGOPROCEDIMENTO", codigoProcedimento);
	try{
		box.executeUpdate("excluirProcedimento.sql");
	}finally{
		box.release();
	}
}
//Método responsável por procurar pelo código 
public Procedimento getProcedimentoPorCodigo(int codigoProcedimento){
	Procedimento procedimento = null;
	BoxSQL box = new BoxSQL();
	box.setParameter("CODIGOPROCEDIMENTO", codigoProcedimento);
	try{
		procedimento = (Procedimento) box.getObject("procedimentoPorCodigo.sql", Procedimento.class);
	}finally{
		box.release();
	}
	return procedimento;
}
//Método responsável por procurar pela descrição
public Procedimento getProcedimentoPorDescricao(String descricao){
	Procedimento procedimento = null;
	BoxSQL box = new BoxSQL();
	box.setParameter("DESCRICAO", descricao);
	try{
		procedimento = (Procedimento) box.getObject("procedimentoPorDescricao.sql", Procedimento.class);
	}finally{
		box.release();
	}
	return procedimento;
}
//Método responsável por retornar o proximo código da tabela 
public int getProximoCodigoProcedimento(){
	int proximoCodigoProcedimento = 0;
	Procedimento procedimento = new Procedimento();
	BoxSQL box = new BoxSQL();
	try{
		procedimento = (Procedimento) box.getObject("procedimentoMaxCodigo.sql", Procedimento.class);
		proximoCodigoProcedimento = procedimento.getCodigoProcedimento()+1;
	}finally{
		box.release();
	}
	return proximoCodigoProcedimento;
}
//Método responsável por criar uma lista 
public List<Procedimento> getTodosProcedimentos(){
	BoxSQL box = new BoxSQL();
	List<Procedimento> listaProcedimento;
	try{
		listaProcedimento = box.getList("procedimentoTodos.sql", Procedimento.class);
	}finally{
		box.release();
	}
	return listaProcedimento;
}

}
[/code]

A pagina JSP

[code]<%@ page language=“java” contentType="text/html; charset=ISO-8859-1"pageEncoding=“ISO-8859-1”%>
<%@ taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt” %>
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>

Procedimento
Código:
Descrição:
Valor:
Tipo: ${tipoProcedimento.descricao } ${procedimento.tipoProcedimento.descricao }







Copyright by SINTHOS
[/code]

E o servlet[code]package sinthos.ctr;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import sinthos.bean.Procedimento;
import sinthos.bean.TipoProcedimento;
import sinthos.dao.ProcedimentoDAO;
import sinthos.dao.TipoProcedimentoDAO;
import sun.reflect.ReflectionFactory.GetReflectionFactoryAction;

public class ProcedimentoCTR extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
static final long serialVersionUID = 1L;

public ProcedimentoCTR() {
	super();
}   	

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	//Define o tipo de resposta
	response.setContentType("text/html; charset=iso-8859-1");
	Procedimento procedimento = new Procedimento();
	ProcedimentoDAO daoProcedimento = new ProcedimentoDAO();
	//Envia o proximo código a ser cadastrado para tela
	procedimento.setCodigoProcedimento(daoProcedimento.getProximoCodigoProcedimento());
	request.setAttribute("procedimento", procedimento);
	//Cria lista de tipos de procedimento
	TipoProcedimentoDAO daoTipoProcedimento = new TipoProcedimentoDAO();
	List<TipoProcedimento> listaTipoProcedimento = daoTipoProcedimento.getTodosTipoProcedimento();
	request.setAttribute("listaTipoProcedimento", listaTipoProcedimento);
	//Redireciona para tela
	request.getRequestDispatcher("procedimento.jsp").forward(request, response);
}  	

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	//Define o tipo de resposta
	response.setContentType("text/html; charset=iso-8859-1");
	Procedimento procedimento = new Procedimento();
	ProcedimentoDAO daoProcedimento = new ProcedimentoDAO();
	String acao = request.getParameter("acao");
	//Recupera dados da tela
	procedimento.setCodigoProcedimento(Integer.parseInt(request.getParameter("codigo")));
	procedimento.setDescricao(request.getParameter("descricao"));
	procedimento.setValor(Double.parseDouble(request.getParameter("valor")));
	//Cria o objeto TipoProcedimentoDAO para recuperar o tipo de procedimento do procedimento
	TipoProcedimentoDAO daoTipoProcedimento = new TipoProcedimentoDAO();
	//Atribui o tipo de procedimento recuperado para o procedimento que está sendo cadastrado
	procedimento.setTipoProcedimento(daoTipoProcedimento.getTipoProcedimentoPorCodigo(Integer.parseInt(request.getParameter("tipoProcedimento"))));
	//Condição dos botões
	if(acao.equals("salvar")){
		procedimento = daoProcedimento.salvarProcedimento(procedimento);
		request.getRequestDispatcher("procedimento.jsp").forward(request, response);
	}else if(acao.equals("excluir")){
		daoProcedimento.excluirProcedimento(Integer.parseInt(request.getParameter("codigo")));
		request.getRequestDispatcher("procedimento.jsp").forward(request, response);
	}else if(acao.equals("pesquisar")){
		procedimento = daoProcedimento.getProcedimentoPorDescricao(procedimento.getDescricao());
		request.setAttribute("procedimento", procedimento);
		request.getRequestDispatcher("procedimento.jsp").forward(request, response);
	}else{
		request.getRequestDispatcher("procedimento.jsp").forward(request, response);
	}
}   	  	    

}[/code]

Alguem pode me dar uma dica do que está acontecendo???

Nem precisava postar o código, seu erro é no banco.

A tabela onde você quer inserir possui a chave estrangeira de outra tabela. Logo para você inserir esse valor na tabela filha ele tem q existir na tabela mãe.

Cara, fiz um insert no braço e deu certo, acho que não estou recuperando certo no Servlet.

Consegui…estava errado no servlet mesmo

Troquei o código

//Cria o objeto TipoProcedimentoDAO para recuperar o tipo de procedimento do procedimento TipoProcedimentoDAO daoTipoProcedimento = new TipoProcedimentoDAO(); //Atribui o tipo de procedimento recuperado para o procedimento que está sendo cadastrado procedimento.setTipoProcedimento(daoTipoProcedimento.getTipoProcedimentoPorCodigo(Integer.parseInt(request.getParameter("tipoProcedimento"))));

Por

//Recupera o Tipo de Procedimento da tela procedimento.setCodigoTipoProcedimento(Integer.parseInt(request.getParameter("tipoProcedimento")));

e deu certo.
Obrigado pela dica