Recuperar Atributo ID JSON

Boa noite galera, não sei se é o lugar certo de postar essa duvida, mas vamos lá
eu e meu amigo estamos fazendo uma aplicação web+webservice+android

Parte Web + Webservice
Dispositivo

package br.com.unip.menudroidweb.model;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;


@Entity
@Table(name="dispositivo")
@XmlRootElement
public class Dispositivo implements Serializable {
	private static final long serialVersionUID = 6622436903831500203L;

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(unique=true, nullable=false)
	private int idDispositivo;

	@Column(nullable=false, length=150)
	private String descricao;

	@Column(nullable=false, length=18)
	private String IMEI;
	
	@Column(nullable=true, length=150)
	private String endereco;

	@Column(nullable=true, length=4)
	private int numero;

	@Column(nullable=true, length=150)
	private String bairro;

	@Column(nullable=true, length=150)
	private String referencia;

	@Column(nullable=true, length=14)
	private String telefone;

Forma de Pagamento

package br.com.unip.menudroidweb.model;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="formapagamento")
public class FormaPagamento implements Serializable {
	private static final long serialVersionUID = -1301308460687039534L;

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(unique=true, nullable=false)
	private int idFormaPagamento;

	@Column(length=100)
	private String descricao;

Produto

package br.com.unip.menudroidweb.model;

import java.io.Serializable;
import java.math.BigDecimal;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;

@Entity
@Table(name = "produto")
@XmlRootElement
@NamedQueries(value={
		@NamedQuery(name="Produto.buscarPorGrupoProduto", query="select p from Produto p where p.grupoProduto = :grupoProduto")		
})
public class Produto implements Serializable {

	private static final long serialVersionUID = 8836023087332514952L;
	
	public static final String PROCURAR_POR_GRUPO_PRODUTO = "Produto.buscarPorGrupoProduto";

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(unique = true, nullable = false)
	private int idProduto;

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "idGrupoProduto")
	private GrupoProduto grupoProduto;
	
	@Column(nullable = false, length = 150)
	private String descricao;

	@Column(nullable = true, length = 300)
	private String observacaoCardapio;

	@Column(nullable = false, precision = 10, scale = 2)
	private BigDecimal precoCusto;

	@Column(nullable = false, precision = 10, scale = 2)
	private BigDecimal precoVenda;

Pedido

package br.com.unip.menudroidweb.model;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlRootElement;

@Entity
@Table(name="pedido")
@XmlRootElement
public class Pedido implements Serializable{

	private static final long serialVersionUID = -1775821194292074585L;
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(unique=true, nullable=false)
	private int idPedido;
	
	
	private Dispositivo dispositivo;
	
	@ManyToOne
	@JoinColumn(name = "idFormaPagamento")
	private FormaPagamento idFormaPagamento;
	
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataPedido;
	
	@Column(nullable = false)
	private double total;
	
	@OneToMany
	@JoinColumn(name = "idItemPedido")
	private List<ItemPedido> itensPedido;

Item Pedido

package br.com.unip.menudroidweb.model;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "itempedido")
public class ItemPedido implements Serializable {
	

	private static final long serialVersionUID = 8133394598027529173L;
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(unique = true, nullable = false)
	private int idItemPedido;
	
	@ManyToOne
	@JoinColumn(name ="idPedido")
	private Pedido idPedido;
	
	@ManyToOne
	@JoinColumn(name = "idProduto")
	private Produto idProduto;
	
	@Column(nullable = false)
	private int quantidade;
	
	@Column(nullable = false)
	private double valor;
	
	@Column(nullable = true)
	private String observacao;

PedidoFacade

package br.com.unip.menudroidweb.facade;

import java.io.Serializable;
import java.util.ArrayList;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

import br.com.unip.menudroidweb.dao.PedidoDAO;
import br.com.unip.menudroidweb.model.Pedido;

import com.google.gson.Gson;

public class PedidoFacade  implements Serializable {

	private static final long serialVersionUID = 1189380336309409902L;
	private PedidoDAO pedidoDAO = new PedidoDAO();
	
	
	@POST
    @Path("/inserir")
	@Consumes("application/json")
	public void createPedido(Pedido pedido){
		
		/*
		 * AQUI VOU MONTAR OS OBJETOS PARA SALVAR
		 * 
		 * */
		pedidoDAO.beginTransaction();
		pedidoDAO.save(pedido);
		pedidoDAO.commitAndCloseTransaction();
	}
	
	@GET
	@Path("/listar/{id}")
	@Produces("application/json")
	public String listarPedidoAndroid(@PathParam("id") int pedidoId) {
		pedidoDAO.beginTransaction();
		Pedido pedido = pedidoDAO.find(pedidoId);
		pedidoDAO.closeTransaction();
		return new Gson().toJson(pedido);
	}
	
	@GET
	@Path("/listar")
	@Produces("application/json")
	public String listarTodosAndroid() {
		pedidoDAO.beginTransaction();
		ArrayList<Pedido> pedido = (ArrayList<Pedido>) pedidoDAO.findAll();
		pedidoDAO.closeTransaction();
		return new Gson().toJson(pedido);
	}
	

}

O amigo meu, que esta desenvolvendo a parte android vai mandar um JSON com vários ItemPedido
minha duvida é
Ele tem que mandar o JSON com os atributos iguaizinhos aos atributos da minha classe?
porque ele vai me mandar um JSON com varios ID’s dos produtos
se ele fizer isso eu terei que fazer assim?

  • pegar o id buscar no banco o produto que pertence a esse id adicionar esse objeto produto na minha lista de ItemPedido
  • pegar o id do dispositivo buscar no banco o dispositivoadicionar no pedido
  • pegar o id da forma de pagamento buscar no banco adicionar no pedido
  • pegar a lista ItemPedido já preenchida com os produtos e adicionar ao pedido

só depois disso gravar no banco o pedido?

obs: vou fazer isso no PedidoFacade no método createPedido (onde comentei)

é todo esse trabalho mesmo que tenho que fazer?
ou estou viajando? :shock: