Bom dia , galera to desenvolvendo para faculdade mais não só sabendo muito bem como trabalha com os métodos salvar e listar quando existe chaves estrangeira na tabelas :
alguém sabe me fala como ficaria , Ex
Tabela veiculo , tenho chaves estrangeira : idcor , idmarca ,idnportas , idcat , idmodelo
preciso salvar atributos  para todos mais não estou conseguindo ,  se realizo o insert sem as chaves estrangeiras funciona normal .
Segue imagem em anexo .
Alguém consegue me ajuda ???
Segue o CLASSE DAO
public class CarroDao {
public void excluir(Carro c) throws SQLException {
	StringBuilder sql = new StringBuilder();
	sql.append("DELETE FROM veiculo WHERE idveiculo = ?");
	
	
	 Connection conexao = Conexaofactory.conectar();
	
	PreparedStatement comando = conexao.prepareStatement(sql.toString());
	comando.setInt(1, c.getCodigo() ); 
	
	comando.executeUpdate();
			
	
}
 /**INSERE DADOS NA TABELA veiculo**/
public void salvar(Carro c) throws SQLException {
	StringBuilder sql = new StringBuilder();
	sql.append("INSERT INTO veiculo (placa, renavam, chassi, anofab) ");
	sql.append("VALUES (?,?,?,?)");
	
	Connection conexao = Conexaofactory.conectar();
	
	PreparedStatement comando = conexao.prepareStatement(sql.toString());
	comando.setString  (1, c.getPlaca());
	comando.setString  (2, c.getRenavam());
	comando.setString  (3, c.getChassi());
	comando.setString  (4, c.getAno());
	
	comando.executeUpdate();
	
	
	StringBuilder sql2 = new StringBuilder();
	
	sql2.append("INSERT INTO cor (descricao) ");
	sql2.append("VALUES (?)");
	PreparedStatement comando2 = conexao.prepareStatement(sql2.toString());
	comando2.setString  (1, c.getCor());
	comando2.executeUpdate();
	
	StringBuilder sql3 = new StringBuilder();
	
	sql3.append("INSERT INTO marca (descricao) ");
	sql3.append("VALUES (?)");
	PreparedStatement comando3 = conexao.prepareStatement(sql3.toString());
	comando3.setString  (1, c.getMarca());
	comando3.executeUpdate();
	
	
	StringBuilder sql4 = new StringBuilder();
	
	sql4.append("INSERT INTO nportas (descricao) ");
	sql4.append("VALUES (?)");
	PreparedStatement comando4 = conexao.prepareStatement(sql4.toString());
	comando4.setString  (1, c.getNportas());
	comando4.executeUpdate();
	
    
    StringBuilder sql5 = new StringBuilder();
	
	sql5.append("INSERT INTO categoria (descricao) ");
	sql5.append("VALUES (?)");
	PreparedStatement comando5 = conexao.prepareStatement(sql5.toString());
	comando5.setString  (1, c.getCategoria());
	comando5.executeUpdate();
	
	
    StringBuilder sql6 = new StringBuilder();
	
	sql6.append("INSERT INTO modelo (descricao) ");
	sql6.append("VALUES (?)");
	PreparedStatement comando6 = conexao.prepareStatement(sql6.toString());
	comando6.setString  (1, c.getModelo());
	comando6.executeUpdate();
	
	
	
	
}
public void salvarcor (Carro c ) throws SQLException {
	
	
	
	
	
	
}
public void editar (Carro c) throws SQLException {
	
	
	StringBuilder sql = new StringBuilder();
	
	sql.append("UPDATE veiculo ");
	sql.append("SET  placa = ? , renavam = ? , chassi = ? , anofab = ? ");
	sql.append("WHERE idveiculo = ?");
	
	
    Connection conexao = Conexaofactory.conectar();
	
	PreparedStatement comando = conexao.prepareStatement(sql.toString());
	
	comando.setString (1, c.getPlaca());
	comando.setString (2, c.getRenavam());
	comando.setString (3, c.getChassi());
	comando.setString (4, c.getAno());
	comando.setInt    (5, c.getCodigo());
	
	comando.executeUpdate();
	
	StringBuilder sql2 = new StringBuilder();
	
	sql2.append("UPDATE cor ");
	sql2.append("SET  descricao = ? ");
	sql2.append("WHERE idcor = ?");
	
	
	PreparedStatement comando2 = conexao.prepareStatement(sql2.toString());
	
	comando2.setString (1, c.getCor());
	
	
	comando.executeUpdate();
	
	
	
	
  StringBuilder sql3 = new StringBuilder();
	
	sql3.append("UPDATE marca ");
	sql3.append("SET  descricao = ? ");
	sql3.append("WHERE idmarca = ?");
	
	
	PreparedStatement comando3 = conexao.prepareStatement(sql3.toString());
	
	comando3.setString (1, c.getMarca());
	
	
	comando3.executeUpdate();
	
	 StringBuilder sql4 = new StringBuilder();
		
		sql4.append("UPDATE nportas ");
		sql4.append("SET  descricao = ? ");
		sql4.append("WHERE idportas = ?");
		
		
		PreparedStatement comando4 = conexao.prepareStatement(sql3.toString());
		
		comando4.setString (1, c.getNportas());
		
		
		comando4.executeUpdate();
		
		
		
		    StringBuilder sql5 = new StringBuilder();
			
			sql5.append("UPDATE categoria ");
			sql5.append("SET  descricao = ? ");
			sql5.append("WHERE idcat = ?");
			
			
			PreparedStatement comando5 = conexao.prepareStatement(sql5.toString());
			
			comando5.setString (1, c.getCategoria());
			
			
			comando5.executeUpdate();
	
           
				
				
				
				    StringBuilder sql6 = new StringBuilder();
					
					sql6.append("UPDATE modelo ");
					sql6.append("SET  descricao = ? ");
					sql6.append("WHERE idmodelo = ?");
					
					
					PreparedStatement comando6 = conexao.prepareStatement(sql6.toString());
					
					comando6.setString (1, c.getModelo());
					
					
					comando6.executeUpdate();
			
}
  
public Carro buscaporcodigo(Carro c) throws SQLException {
	
	StringBuilder sql = new StringBuilder();
	sql.append("SELECT  idveiculo, placa , renavam , chassi , anofab ");
	sql.append("FROM  veiculo ");
	sql.append("WHERE idveiculo = ?");
	
	
	
	
    Connection conexao = Conexaofactory.conectar();
	
    PreparedStatement comando = conexao.prepareStatement(sql.toString());
	comando.setInt  (1, c.getCodigo());
	
	ResultSet resultado = comando.executeQuery();
	Carro retorno  = null ;
	
	if (resultado.next()) {
		retorno = new Carro();
		
		retorno.setCodigo(resultado.getInt("idveiculo"));
		retorno.setPlaca(resultado.getString("placa"));
		retorno.setRenavam(resultado.getString("renavam"));
		retorno.setChassi (resultado.getString("chassi"));
		retorno.setAno  (resultado.getString("anofab"));
	}
	
	
	return retorno;
	
}
public ArrayList<Carro>buscarporPlaca(Carro c)throws SQLException {
	
	StringBuilder sql = new StringBuilder();
	sql.append("SELECT  idveiculo, placa , renavam , chassi , anofab ");
	sql.append("FROM  veiculo ");
	sql.append("WHERE placa LIKE ? ");
	
    Connection conexao = Conexaofactory.conectar();
	
    PreparedStatement comando = conexao.prepareStatement(sql.toString());
    
    comando.setString(1,"%" + c.getPlaca() + "%");
	
	ResultSet resultado = comando.executeQuery();
   
	ArrayList<Carro>lista = new ArrayList<Carro>();
	
	    while(resultado.next()){
		Carro item = new Carro();
		c.setCodigo(resultado.getInt("idveiculo")) ;
		c.setPlaca(resultado.getString("placa")) ;
		c.setRenavam(resultado.getString("renavam")) ;
		c.setChassi(resultado.getString("chassi")) ;
		c.setAno(resultado.getString("anofab")) ;
	
		
		lista.add(item);
	}
	
  return lista;
	
	
}
public ArrayList<Carro> listar () throws SQLException{
	
	
	
	StringBuilder sql = new StringBuilder();
	sql.append("SELECT idveiculo, placa , renavam , chassi , anofab , cor.descricao as 'c.descricao', marca.descricao as 'marca_descricao',nportas.descricao as 'nportas_descricao',categoria.descricao as 'categoria_descricao',modelo.descricao as 'modelo_descricao' ");
	
	sql.append("FROM  veiculo ");
	sql.append ("INNER JOIN cor ON v.idcor = c.idcor;");
	sql.append ("INNER JOIN marca ON marca.idmarca=marca.idmarca ");
	sql.append ("INNER JOIN nportas ON nportas.idnportass=nportas.idnportas ");
	sql.append ("INNER JOIN categoria ON categoria.idcat=categoria.idcat ");
	sql.append ("INNER JOIN modelo ON modelo.idmodelo=modelo.idmodelo ");
	sql.append("ORDER BY placa,renavam,chassi,anofab, c.descricao , marca.descricao, nportas.descricao,categoria.descricao,modelo.descricao ASC ");
	
	
    Connection conexao = Conexaofactory.conectar();
	
    PreparedStatement comando = conexao.prepareStatement(sql.toString());
	ResultSet resultado = comando.executeQuery();
	
     ArrayList<Carro>lista = new ArrayList<Carro>();
	
	 while(resultado.next()){
		Carro c = new Carro();
		c.setCodigo(resultado.getInt("idveiculo")) ;
		c.setPlaca(resultado.getString("placa")) ;
		c.setRenavam(resultado.getString("renavam")) ;
		c.setChassi(resultado.getString("chassi")) ;
		c.setAno(resultado.getString("anofab")) ;
		c.setCor(resultado.getString("cor.descricao")) ; 
		c.setMarca(resultado.getString("marca_descricao")) ;
		c.setNportas(resultado.getString("nportas_descricao")) ;
		c.setCategoria(resultado.getString("categoria_descricao")) ;
		c.setModelo(resultado.getString("modelo_descricao")) ;
		
		lista.add(c);
	
	}
  return lista;
	 }
}
CLASSE CARRO
public class Carro {
private int codigo;
private String  placa;
private String renavam;
private String chassi;
private String ano;
private String cor;
private String marca;
private String nportas;
private String categoria;
private String modelo;
public int getCodigo() {
return codigo;
}
public void setCodigo(int codigo) {
this.codigo = codigo;
}
public String getPlaca() {
return placa;
}
public void setPlaca(String placa) {
this.placa = placa;
}
public String getRenavam() {
return renavam;
}
public void setRenavam(String renavam) {
this.renavam = renavam;
}
public String getChassi() {
return chassi;
}
public void setChassi(String chassi) {
this.chassi = chassi;
}
public String getAno() {
return ano;
}
public void setAno(String ano) {
this.ano = ano;
}
public String getCor() {
return cor;
}
public void setCor(String cor) {
this.cor = cor;
}
public String getMarca() {
return marca;
}
public void setMarca(String marca) {
this.marca = marca;
}
public String getNportas() {
return nportas;
}
public void setNportas(String nportas) {
this.nportas = nportas;
}
public String getCategoria() {
return categoria;
}
public void setCategoria(String categoria) {
this.categoria = categoria;
}
public String getModelo() {
return modelo;
}
public void setModelo(String modelo) {
this.modelo = modelo;
}
public String toString() {
	
String  saida = codigo + " - "+ placa + " - "+ renavam + " - "+ chassi + " - "+ ano +" - "+ cor +" - "+ marca +" - " + nportas +" - "+ categoria + " - "+ modelo;
	return saida;
}
}
CLASSE BEAN
public class CarroBean {
private ArrayList <Carro> itens;
private ArrayList <Carro> itensfiltrados;
private Carro carro;
public ArrayList<Carro> getItens() {
	return itens;
}
public void setItens(ArrayList<Carro> itens) {
	this.itens = itens;
}
public ArrayList<Carro> getItensfiltrados() {
	return itensfiltrados;
}
public void setItensfiltrados(ArrayList<Carro> itensfiltrados) {
	this.itensfiltrados = itensfiltrados;
}
@PostConstruct
public void PrepararPesquisa () {
   try {
		   CarroDao cdao = new CarroDao();
		 itens = cdao.listar();
		JSFUtil.adicionarMensagemErro("Ex.getMessage()");
	} catch (SQLException e) {
		
		e.printStackTrace();
	}
    
   
}
  /*
		 * Abaixo e feito a parte de atualização da lista automatica na tela de Pesquisa veiculo
		 */
   public void prepararnovo() {
	   carro = new Carro();
    	   
   }
   
 
   public void novo() {
	  
     try {
    	 
    	CarroDao cdao = new CarroDao();
		cdao.salvar(carro);
		
		itens = cdao.listar();
		
        
        JSFUtil.adicionarMensagemSucesso("Salvo com Sucesso");
		
	} catch (SQLException e) {
		JSFUtil.adicionarMensagemErro("Ex.getMessage()");
		e.printStackTrace();
	}	   
   }
   
   
 
	  
   
	   public void excluir () {
		   
		   try {
		    	 
		    	CarroDao cdao = new CarroDao();
				cdao.excluir(carro);
				
				itens = cdao.listar();
	         
	            
	            JSFUtil.adicionarMensagemSucesso("Exclusão realizada com sucesso");
				
			} catch (SQLException e) {
				JSFUtil.adicionarMensagemErro("Ex.getMessage()");
				e.printStackTrace();
			}	   
		  
	
	   }
	   
	   
	 
		   public void editar () {
			   
			   try {
			    	 
			    	CarroDao cdao = new CarroDao();
					cdao.editar(carro);
					
					itens = cdao.listar();
		            
		            
		            JSFUtil.adicionarMensagemSucesso("Edição realizada com sucesso");
					
				} catch (SQLException e) {
					JSFUtil.adicionarMensagemErro("Ex.getMessage()");
					e.printStackTrace();
				}	   
			  
		
		   }
	   
  
	
public Carro getCarro() {
	return carro;
}
public void setCarro(Carro carro) {
	this.carro = carro;
}
}

