[RESOLVIDO] Conflito comando insert SQL e FK da tabela

Oi pessoal! Preciso de uma ajuda

Ao tentar executar o insert na tabela TabRecebimento retorna o erro no console: SQLServerException:

A instrução INSERT conflitou com a restrição do FOREIGN KEY “fk_PacID”. O conflito ocorreu no banco de dados “dbmanager”, tabela “dbo.TabPaciente”, column ‘tpaID’.

A Tabela TabRecebimento possui 2 FK: fk_PacID (vem da tabela TabPaciente) e fk_profID (vem da tabela TabProfissional)

Já verifiquei e as tabelas filhas possuem registros, então não estou conseguindo verificar o que está gerando o erro.

Na tela de recebimento é feito uma busca por paciente (onde carrega o ID em um campo) e uma busca por profissional (que carrega o ID em um campo), esses ids são utilizados na hora de criar um recebimento.

No banco de dados os campos que trazem a chave estrangeira permitem null porque cadastrei como ON DELETE SET NULL;

Conseguem me ajudar por favor?

COMANDO SQL INSERT - RECEBIMENTO DAO

      public RecebimentoDAO(){ //metodo pra conexão
         conn = new Conexao().getConexao(); //recebe a classe conexão e dentro dela tem o metodo get conexao, chama o método e faz por la
     }
        
        Recebimento recebimento = new Recebimento();
       
        //metodo de inserção de dados
        public void create(Recebimento TabRecebimento){
                           
                String sql = "INSERT INTO TabRecebimento (trNum,trValor,trData,"
                + "trMeio,trPresenca,trtpaID,trtprID)"
                + "VALUES (?,?,?,?,?,?,?)";
        
        try{
            prep = conn.prepareStatement(sql); //vou passar comando sql acima na conexão
            prep.setInt(1,recebimento.getNumero_recebimento());//vai setar uma int, no primeiro parametro, utilizando o método
            prep.setFloat(2,recebimento.getValor_recebimento());
            prep.setString(3,recebimento.getData_recebimento());
            prep.setString(4,recebimento.getMeio_recebimento());
            prep.setInt(5,recebimento.getPresenca_recebimento());
            prep.setInt(6,recebimento.getID_recpaciente());
            prep.setInt(7,recebimento.getID_recprofissional());

            prep.execute();
            
            JOptionPane.showMessageDialog(null, "Cadastrado com sucesso!");
            
        }catch (SQLException ex){
            System.err.println("Erro - Cadastro de recebimento"+ex);
    }}

VIEW - JBUTTON

 public void Pesquisapaciente(){
        String nome = rec_buscapac.getText();
        
        Paciente paciente = pacDAO.readNome(nome);
        
        if (paciente == null){
            JOptionPane.showMessageDialog(null, "Paciente não encontrado! Verifique se o nome está completo");
       
        }else{
            
            rec_nomepac.setText(paciente.getNome_paciente());
            rec_IDpac.setText(String.valueOf(paciente.getID_paciente())); //conversão int para String

    }
    }
private void btnrec_pesquisarpacActionPerformed(java.awt.event.ActionEvent evt) {                                                    
         Pesquisapaciente();
}

MODEL RECEBIMENTO

    public class Recebimento {   
        private int numero_recebimento;
        private float valor_recebimento;
        private String data_recebimento;
        private String meio_recebimento;
        private int presenca_recebimento;
        private String pac_recebimento;
        private String prof_recebimento;
        private int ID_recpaciente;
        private int ID_recprofissional;
        private int ID_recebimento;
        
        public int getNumero_recebimento(){
            return numero_recebimento;
        }    
        public void setNumero_recebimento(int numero_recebimento){
            this.numero_recebimento = numero_recebimento;
        }    
        public float getValor_recebimento(){
            return valor_recebimento;
        }   
        public void setValor_recebimento(float valor_recebimento){
            this.valor_recebimento = valor_recebimento;   
        }    
        public String getData_recebimento(){
            return data_recebimento;
        }    
        public void setData_recebimento(String data_recebimento){
            this.data_recebimento = data_recebimento;
        }        
         public String getMeio_recebimento(){
            return meio_recebimento;
        }    
        public void setMeio_recebimento(String meio_recebimento){
            this.meio_recebimento = meio_recebimento;
        }     
        public int getPresenca_recebimento(){
            return presenca_recebimento;
        }
        public void setPresenca_recebimento(int presenca_recebimento){
            this.presenca_recebimento = presenca_recebimento;
        }     
        public String getPac_recebimento(){
            return pac_recebimento;
        }    
        public void setPac_recebimento(String pac_recebimento){
            this.pac_recebimento = pac_recebimento;
        }      
        public String getProf_recebimento(){
            return prof_recebimento;
        }    
        public void setProf_recebimento(String prof_recebimento){
            this.prof_recebimento = prof_recebimento;
        }     
         public int getID_recpaciente() {
            return ID_recpaciente;
        }
        public void setID_recpaciente(int ID_recpaciente) {
            this.ID_recpaciente = ID_recpaciente;
        }
             public int getID_recprofissional() {
            return ID_recprofissional;
        }
        public void setID_recprofissional(int ID_recprofissional) {
            this.ID_recprofissional = ID_recprofissional;
        }   
         public int getID_recebimento() {
            return ID_recebimento;
        }
        public void setID_recebimento(int ID_recebimento) {
            this.ID_recebimento = ID_recebimento;
        }}

PAC DAO - Método ReadNome

public Paciente readNome(String nome){
        
        String sql = "SELECT * FROM TabPaciente WHERE tpaNome = ?";//busca semelhanças no início e final dos registros
        
        try{
           prep = conn.prepareStatement(sql); //cria comando select após conectar banco
           prep.setString(1,nome); //define qual o valor será enviado           
           
           result = prep.executeQuery();//armazena o retorno
           
           if (result.next()){ //next: verifica se encontrou resultados  
                Paciente paciente = new Paciente();
                paciente.setNome_paciente(result.getString("tpaNome"));//(nome da coluna do banco)
                paciente.setNomeref_paciente(result.getString("tpaNomeRef"));
                paciente.setNasc_paciente(result.getString("tpaNasc"));
                paciente.setCel_paciente(result.getString("tpaCelular"));
                paciente.setEmail_paciente(result.getString("tpaEmail"));
                paciente.setContato_paciente(result.getString("tpaContEm"));
                paciente.setCelcontato_paciente(result.getString("tpaCelularEm"));
                paciente.setID_paciente(result.getInt("tpaID"));
                int ativo = result.getInt("tpaAtivo");
               
                    if (ativo == 1){
                    paciente.setAtivo_paciente(true);
                 
                    }else{
                    paciente.setAtivo_paciente(false);   
                    }

                    return paciente;
                
             }else{
             return null;
             }
           
        }catch(SQLException ex){
           throw new RuntimeException ("Erro - Listar paciente pela busca"+ex);     
                  
        }finally {
            conex.closeConexao(conn, prep, result);
    } }
Recebimento recebimento = new Recebimento(); //metodo de inserção de dados public void 

No teu RecemindoDAO tens lá perdido este Recebimento que não é preciso nem é usado para nada.

public void create(Recebimento TabRecebimento){ 
    String sql = "INSERT INTO TabRecebimento 
(trNum,trValor,trData," + "trMeio,trPresenca,trtpaID,trtprID)" + "VALUES (?,?,?,?,?,?,?)"; try{ prep = 
    conn.prepareStatement(sql); 
    prep.setInt(1,recebimento.getNumero_recebimento()); 

Mas no teu create, em vez de usares o parâmetro que recebes TabRecebimento, estás a usar o objeto da instancia, que não está preenchido e vai tentar inserir valores na BD vazios e/ou a zero.

Obrigada!