Web service com duas tabelas(primary key e foreign key) salvando e consultando

Olá Pessoal preciso muito da ajuda de vocês. preciso salvar dados referentes a entrada de produtos em duas tabelas diferentes, uma entrada e outra itens de entrada. vou deixar meu código abaixo o esquema de como estou usando.
No cliente vou ter os dados referentes para salvar nas duas tabelas. Estou usando chave primária como Codincremental da tabela itensEntrada ela e usada como estrangeira na tabela Entrada.

Tentei com inner join não consegui para puxar os dados estou tentando usar uma especie de cabeçalho para salvar e consultar.

Preciso que todos dados do json fiquem em uma unica URL para usar no cliente.

Objeto Entrada

package objetos;

import static java.util.Collections.list;
import java.util.LinkedList;
import java.util.List;

public class IAM_Entrada {

private int codE;
private String data;
private int fornecedor;
private int funcionario;
private float valor_Nota;


private List <IAM_Itens_Entrada> itensEntrada;



public List<IAM_Itens_Entrada> getItensEntrada() {
    return itensEntrada;
}

public void setItensEntrada(List<IAM_Itens_Entrada> itensEntrada) {
    this.itensEntrada = itensEntrada;
}



public int getCodE() {
    return codE;
}

public void setCodE(int codE) {
    this.codE = codE;
}

public String getData() {
    return data;
}

public void setData(String data) {
    this.data = data;
}

public int getFornecedor() {
    return fornecedor;
}

public void setFornecedor(int fornecedor) {
    this.fornecedor = fornecedor;
}

public int getFuncionario() {
    return funcionario;
}

public void setFuncionario(int funcionario) {
    this.funcionario = funcionario;
}

public float getValor_Nota() {
    return valor_Nota;
}

public void setValor_Nota(float valor_Nota) {
    this.valor_Nota = valor_Nota;
}

}

Objeto Itens Entrada

/*

  • To change this license header, choose License Headers in Project Properties.
  • To change this template file, choose Tools | Templates
  • and open the template in the editor.
    */
    package objetos;

import java.util.List;

/**
*

  • @author jonh
    */
    public class IAM_Itens_Entrada {

    private int cod_Incremetal;
    private int cod_Produto;
    private float valor_Unitario;
    private int quantidade;

    private List <IAM_Itens_Entrada> itensEntrada;

    public List<IAM_Itens_Entrada> getItensEntrada() {
    return itensEntrada;
    }

    public void setItensEntrada(List<IAM_Itens_Entrada> itensEntrada) {
    this.itensEntrada = itensEntrada;
    }

    public int getCod_Incremetal() {
    return cod_Incremetal;
    }

    public void setCod_Incremetal(int cod_Incremetal) {
    this.cod_Incremetal = cod_Incremetal;
    }

    public int getCod_Produto() {
    return cod_Produto;
    }

    public void setCod_Produto(int cod_Produto) {
    this.cod_Produto = cod_Produto;
    }

    public float getValor_Unitario() {
    return valor_Unitario;
    }

    public void setValor_Unitario(float valor_Unitario) {
    this.valor_Unitario = valor_Unitario;
    }

    public int getQuantidade() {
    return quantidade;
    }

    public void setQuantidade(int quantidade) {
    this.quantidade = quantidade;
    }

}
Conexão
package utilitarios;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Conexao {

final private String driver = "com.mysql.jdbc.Driver";
final private String url = "jdbc:mysql://localhost/teste";
final private String usuario = "root";
final private String senha = "";

public Connection conectar()
{
    Connection conn = null;
    try
    {
        Class.forName(driver);
        conn = DriverManager.getConnection(url, usuario, senha);
    }
    catch(ClassNotFoundException ex)
    {
        ex.printStackTrace();
    }
    catch(SQLException ex)
    {
        ex.printStackTrace();
    }
    return conn;
}

}
Entrada DAO

package classesdao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import objetos.IAM_Entrada;
import utilitarios.Conexao;

public class IAM_EntradaDAO {

 Connection conn;

public IAM_EntradaDAO() {
    conn = new Conexao().conectar();
}


 public void salvar(IAM_Entrada c)
{
    try
    {
        PreparedStatement ppStmt = conn.prepareStatement("INSERT INTO entradas(codE,data,fornecedor,funcionario,valor_Nota) values(?,?,?,?,?)");
        ppStmt.setInt(1, c.getCodE());
        ppStmt.setString(2, c.getData());
        ppStmt.setInt(3, c.getFornecedor());
        ppStmt.setInt(4, c.getFuncionario());
        ppStmt.setFloat(5, c.getValor_Nota());
       
   
        ppStmt.execute();
    }
    catch(SQLException ex)
    {
        ex.printStackTrace();
    }
}
 
 
 
   public List<IAM_Entrada> getEntrada()
{
    List<IAM_Entrada> lstG = new LinkedList<>();
    try
    {
        PreparedStatement ppStmt = conn.prepareStatement("SELECT * FROM entradas");
        ResultSet rs = ppStmt.executeQuery();
        while(rs.next())
        {
            lstG.add(getGeladeira(rs));
        }
    }
    catch(SQLException ex)
    {
        ex.printStackTrace();
    }
    return lstG;
}

private IAM_Entrada getGeladeira(ResultSet rs) throws SQLException
{
    IAM_Entrada g = new IAM_Entrada();

    g.setCodE(rs.getInt("codE"));
    g.setData(rs.getString("data"));
    g.setFornecedor(rs.getInt("fornecedor"));
    g.setFuncionario(rs.getInt("funcionario"));
    g.setValor_Nota(rs.getInt("valor_Nota"));
   
    
    return g;
} 

}
Dao Itens de Entrada
/*

  • To change this license header, choose License Headers in Project Properties.

  • To change this template file, choose Tools | Templates

  • and open the template in the editor.
    /
    package classesdao;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.LinkedList;
    import java.util.List;
    import objetos.IAM_Entrada;
    import objetos.IAM_Itens_Entrada;
    import utilitarios.Conexao;
    /
    *

  • @author jonh
    */
    public class IAM_Itens_EntradaDAO {

    Connection IAM_conn;

    public IAM_Itens_EntradaDAO() {
    IAM_conn = new Conexao().conectar();
    }

    public void salvar(IAM_Itens_Entrada e)
    {
    try
    {
    PreparedStatement ppStmt = IAM_conn.prepareStatement(“INSERT INTO itens_entrada(cod_Produto, valor_Unitario, quantidade) values(?,?,?)”);

         ppStmt.setInt(1, e.getCod_Produto());
         ppStmt.setFloat(2, e.getValor_Unitario());
         ppStmt.setInt(3, e.getQuantidade());
         ppStmt.execute();
     }
     catch(SQLException ex)
     {
         ex.printStackTrace();
     }
    

    }

    public List<IAM_Itens_Entrada> getIAM_Itens_Entrada()
    {
    List<IAM_Itens_Entrada> lstC = new LinkedList<>();
    try
    {
    PreparedStatement ppStmt = IAM_conn.prepareStatement(“SELECT * FROM itens_entrada”);
    ResultSet rs = ppStmt.executeQuery();
    while(rs.next())
    {
    lstC.add(getIAM_Itens_Entrada(rs));
    }
    }
    catch(SQLException ex)
    {
    ex.printStackTrace();
    }
    return lstC;
    }
    //Fiquei com Dúvida nessa parte

    private IAM_Itens_Entrada getIAM_Itens_Entrada(ResultSet rs) throws SQLException
    {
    IAM_Itens_Entrada e = new IAM_Itens_Entrada();

     e.setCod_Produto(rs.getInt("cod_Produto"));
     e.setValor_Unitario(rs.getFloat("valor_Unitario"));
     e.setQuantidade(rs.getInt("quantidade"));
     return e;
    

    }

    }

Entrada Bo

package classesbo;

import classesdao.IAM_EntradaDAO;
import java.util.List;
import objetos.IAM_Entrada;

public class IAM_EntradaBO {

IAM_EntradaDAO cDAO;

public IAM_EntradaBO() {
    cDAO = new IAM_EntradaDAO();
}

  public void salvar(IAM_Entrada g)
{        
    cDAO.salvar(g);
}

public List<IAM_Entrada> getEntrada()
{
    return cDAO.getEntrada();
}

}

Itens de Entrada BO

/*

  • To change this license header, choose License Headers in Project Properties.
  • To change this template file, choose Tools | Templates
  • and open the template in the editor.
    */
    package classesbo;

import classesdao.IAM_Itens_EntradaDAO;
import java.util.List;
import objetos.IAM_Itens_Entrada;

/**
*

  • @author jonh
    */

    public class IAM_Itens_EntradaBO {

    IAM_Itens_EntradaDAO IAMDAO;

    public IAM_Itens_EntradaBO() {
    IAMDAO = new IAM_Itens_EntradaDAO();
    }

    public void salvar(IAM_Itens_Entrada e)
    {
    IAMDAO.salvar(e);
    }

    public List<IAM_Itens_Entrada> getIAM_Itens_Entrada()
    {
    return IAMDAO.getIAM_Itens_Entrada();
    }

    }
    Estou usando Resource ela está salvando em forma individual

/*

  • To change this license header, choose License Headers in Project Properties.
  • To change this template file, choose Tools | Templates
  • and open the template in the editor.
    */
    package ws;

import classesbo.IAM_EntradaBO;
import com.google.gson.Gson;
import java.util.List;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PUT;
import objetos.IAM_Entrada;
import objetos.IAM_Itens_Entrada;

/**

  • REST Web Service

  • @author jonh
    */
    @Path(“entrada”)
    public class EntradaResource {

    @Context
    private UriInfo context;

    /**

    • Creates a new instance of GeladeiraResource
      */
      public EntradaResource() {
      }

    /**

    • Retrieves representation of an instance of ws.EntradaResource

    • @return an instance of java.lang.String
      */
      @GET
      @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON)
      public List<IAM_Entrada> getJson() {

      return new IAM_EntradaBO().getEntrada();

    }

    /**

    • PUT method for updating or creating an instance of EntradaResource
    • @param content representation for the resource
      */
      @PUT
      @Consumes(javax.ws.rs.core.MediaType.APPLICATION_JSON)
      public void putJson(String content) {
      Gson g = new Gson();
      IAM_Entrada c = g.fromJson(content,IAM_Entrada.class);
      System.out.println(c.getCodE()+" - “+c.getData()+” - “+c.getFornecedor()+” - “+c.getFuncionario()+” - "+c.getValor_Nota());
      new IAM_EntradaBO().salvar©;

    }
    }

Olá, qual é exatamente o seu problema?

Olá Luan, até esse momento está salvando de forma individual preciso que salve a tabela Entrada e itensEntrada.

A parte em azul e a tabela Entrada e a parte abaixo e ItensEntrada preciso salvar as duas ao mesmo tempo no cliente e chama-las ao mesmo tempo usando o resource
@Path(“entrada”)
public class EntradaResource {

@Context
private UriInfo context;

/**
 * Creates a new instance of GeladeiraResource
 */
public EntradaResource() {
}

/**
 * Retrieves representation of an instance of ws.EntradaResource
 * @return an instance of java.lang.String
 */
@GET
@Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON)
public List<IAM_Entrada> getJson() {
    
return new IAM_EntradaBO().ListEntrada();

}



/**
 * PUT method for updating or creating an instance of EntradaResource
 * @param content representation for the resource
 */
@PUT
@Consumes(javax.ws.rs.core.MediaType.APPLICATION_JSON)
public void putJson(String content) {
    Gson g = new Gson();
    IAM_Entrada c = g.fromJson(content,IAM_Entrada.class);
    System.out.println(c.getCodE()+" - "+c.getData()+" - "+c.getFornecedor()+" - "+c.getFuncionario()+" - "+c.getValor_Nota());
    new IAM_EntradaBO().salvar(c);
    
}

}

No final tenho ter só uma URl para o serviço.
Não estou conseguindo salvar as duas ao mesmo tempo nem consultar as duas ao mesmo tempo no json.

Se você tiver alguma ideia o que fazer.

Obrigado.

Onde você está fazendo a chamada para salvar os itens? O método salvar de IAM_Itens_EntradaBO não está sendo chamado em lugar nenhum, considerando o que você mostrou ai. Fora isso, o código está burocrático e confuso, cheio de siglas ao invés de ser mais autoexplicativo para o negócio, mas de qualquer forma isso não tem haver com o problema que você está tendo.

Olá essas siglas e por que e um trabalho da faculdade ai e as iniciais do nome ficou muito confuso mesmo.

faço a chamada para salvar e listar a entrada EntradaDao

ublic class IAM_EntradaDAO {

 Connection conn;

public IAM_EntradaDAO() {
    conn = new Conexao().conectar();
}


 public void salvar(IAM_Entrada c)
{
    try
    {
        PreparedStatement ppStmt = conn.prepareStatement("INSERT INTO entrada(codE,data,fornecedor,funcionario,valor_Nota) values(?,?,?,?,?)");
        ppStmt.setInt(1, c.getCodE());
        ppStmt.setString(2, c.getData());
        ppStmt.setInt(3, c.getFornecedor());
        ppStmt.setInt(4, c.getFuncionario());
        ppStmt.setFloat(5, c.getValor_Nota());
        ppStmt.execute();
        
       
      
    }
    catch(SQLException ex)
    {
        ex.printStackTrace();
    }
}
 
 
 
   public List<IAM_Entrada> ListEntrada()
{
    List<IAM_Entrada> lstG = new LinkedList<>();
    try
    {
        PreparedStatement ppStmt = conn.prepareStatement("SELECT * FROM entrada");
        ResultSet rs = ppStmt.executeQuery();
        while(rs.next())
        {
            lstG.add(ListEntrada(rs));
        }
    }
    catch(SQLException ex)
    {
        ex.printStackTrace();
    }
    return lstG;
}

private IAM_Entrada ListEntrada(ResultSet rs) throws SQLException
{
    IAM_Entrada g = new IAM_Entrada();

    g.setCodE(rs.getInt("codE"));
    g.setData(rs.getString("data"));
    g.setFornecedor(rs.getInt("fornecedor"));
    g.setFuncionario(rs.getInt("funcionario"));
    g.setValor_Nota(rs.getInt("valor_Nota"));
   
    
    return g;
} 

}

Na classeBo chamo os métodos

public class IAM_Itens_EntradaBO {

IAM_Itens_EntradaDAO IAMDAO;

public IAM_Itens_EntradaBO() {
    IAMDAO = new IAM_Itens_EntradaDAO();
}

public void salvar(IAM_Itens_Entrada e)
{        
    IAMDAO.salvar(e);
}

public List<IAM_Itens_Entrada> getIAM_Itens_Entrada()
{
    return IAMDAO.getIAM_Itens_Entrada();
}

}

No entrada Resorce puxo

@Path(“entrada”)
public class EntradaResource {

@Context
private UriInfo context;

/**
 * Creates a new instance of GeladeiraResource
 */
public EntradaResource() {
}

/**
 * Retrieves representation of an instance of ws.EntradaResource
 * @return an instance of java.lang.String
 */
@GET
@Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON)
public List<IAM_Entrada> getJson() {
    
return new IAM_EntradaBO().ListEntrada();

}



/**
 * PUT method for updating or creating an instance of EntradaResource
 * @param content representation for the resource
 */
@PUT
@Consumes(javax.ws.rs.core.MediaType.APPLICATION_JSON)
public void putJson(String content) {
    Gson g = new Gson();
    IAM_Entrada c = g.fromJson(content,IAM_Entrada.class);
    System.out.println(c.getCodE()+" - "+c.getData()+" - "+c.getFornecedor()+" - "+c.getFuncionario()+" - "+c.getValor_Nota());
    new IAM_EntradaBO().salvar(c);
    
}

}

Esse método está funcionando para salvar só que estou usando dois métodos separado um para entrada e outro para itens_Entrada não estou conseguindo salvar os dois ao mesmo tempo ai listaria e salvaria na mesma tabela. O meu cliente ele salva nas duas tabelas.

TODO supply a title
    <label>Modelo:</label>
    <input type="text" id="modelo"/></br>
    <label>Marca:</label>
    <input type="text" id="marca"/></br>
    <label>Placa:</label>
    <input type="text" id="placa"/></br>
    <label>Ano:</label>
    <input type="text" id="ano"/></br>
    
    
    
    <button onclick ="salvar()">Salvar</button>
    <button onclick="listar()">Listar</button>
    <div id="id01"></div>
    <script>

        function salvar() {
            var modelo = document.getElementById("modelo").value;
            var marca = document.getElementById("marca").value;
            var placa = document.getElementById("placa").value;
            var ano = document.getElementById("ano").value;
            
            
            
            var vJson = '{"modelo":"' + modelo + '","marca":"' + marca + '","placa":"' + placa + '","ano":' + ano + '}';
            var xmlhttp_Put = new XMLHttpRequest();
            var url_Put = "http://localhost:8084/PrjWS_Carro/wr/Entrada";
            xmlhttp_Put.open("PUT", url_Put, true);
            xmlhttp_Put.setRequestHeader('Content-type', 'application/json');
            xmlhttp_Put.send(vJson);
            
            var vJson2 = '{"modelo":"' + modelo + '","marca":"' + marca + '","placa":"' + placa + '","ano":' + ano + '}';
            var xmlhttp_Put2 = new XMLHttpRequest();
            var url_Put2 = "http://localhost:8084/PrjWS_Carro/wr/ItensEntrada";
            xmlhttp_Put2.open("PUT", url_Put2, true);
            xmlhttp_Put2.setRequestHeader('Content-type', 'application/json');
            xmlhttp_Put2.send(vJson2);
           
            
            
            
        }

        function listar() {
            var xmlhttp_Get = new XMLHttpRequest();
            var url_Get = "http://localhost:8084/PrjWS_Carro/wr/carro";

            xmlhttp_Get.onreadystatechange = function () {
                if (xmlhttp_Get.readyState == 4 && xmlhttp_Get.status == 200) {
                    var myArr = JSON.parse(xmlhttp_Get.responseText);
                    myFunction(myArr);
                }

            };
            xmlhttp_Get.open("GET", url_Get, true);
            xmlhttp_Get.send();
            
             function myFunction(arr){
                     var out = '<table border="2"><tr><th>modelo</th><th>marca</th><th>placa</th><th>Ano</th><tr>';
                     var i;
                     
                     for(i=0;i <arr.length; i++){
                         out += '<tr><th>' +arr[i].modelo+'</th><th>'+arr[i].marca+'</th><th>'+arr[i].placa+'</th><th>'+arr[i].ano+'</th></tr>';
                     }
                     out+='</table>';
                     document.getElementById("id01").innerHTML = out;
                 }
        }

    </script>
</body>

Tentei innerJoin mas não está dando certo e para salvar não sei como salvar as duas ao mesmo tempo já tem dois dias que estou tentando sem sucesso.

Como quer salvar os dois se você não está salvando os itens? Chegou a ler o que falei no post anterior sobre isso?

Li sim estou salvando entrada e itens entrada de forma separada não posso usar os dois de forma separada tenho ter somente um itens salvar para salvar tanto entrada como itens entrada.
Preciso de Dao não estou conseguindo fazer tipo salve os dois ao mesmo tempo e busque os dois ao mesmo tempo.

Tive sugestão de fazer uma tabela n/n e buscar as duas ao mesmo tempo innerjoin

/**
* Retrieves representation of an instance of ws.EntradaResource
* @return an instance of java.lang.String
*/
@GET
@Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON)
public List<IAM_Itens_Entrada> getJson() {
return new IAM_Itens_EntradaBO().getIAM_Itens_Entrada();
}

/**
 * PUT method for updating or creating an instance of EntradaResource
 * @param content representation for the resource
 */
@PUT
@Consumes(javax.ws.rs.core.MediaType.APPLICATION_JSON)
public void putJson(String content) {
    
    Gson g = new Gson();
    IAM_Itens_Entrada c = g.fromJson(content,IAM_Itens_Entrada.class);
    System.out.println(c.getCod_Produto()+" - "+c.getValor_Unitario()+" - "+c.getQuantidade());
    new IAM_Itens_EntradaBO().salvar(c);
}

}

Posta o código tentando salvar os dois e diga qual exatamente o problema.