Json incompleto no wbservices com JavaEE+Hibernate+Rest

Bom pessoal estou criando um webServices utilizando JavaEE + Hibernate+Rest.
Abaixo estão minhas classes Vinho e uma das que há um relacionamento TipoVinho.
Um Tipo de Vinho pode ter vários Vinhos, e um Vinho só pode ser de um Tipo de Vinho.
Eu fiz os mapeamentos baseado no JAXB, não sei se estão corretos, mas só estou com um problema, quando
vou gerar o Json da minha Lista de Vinho com o código abaixo.

@GET @Produces({ MediaType.APPLICATION_JSON }) public List<Vinho> getVinhos(){ return vinhoRepository.findAll(); }

Ele me gera o Json somente com os dados da Classe Vinho sem os ids dos relacionamentos.

{"vinho":[{{"IdVinho":"2","NomeVinho":"VinhoA","Imagem":"4.png","Safra":"1213123","Preco":"123123.0"}]}

Como é a minha primeira vez eu não sei ao certo como ele deveria trazer esse Json com as FK como por exemplo o Id do Tipo de Vinho.
Gostaria de uma luz rsrs. Obrigado.

Abaixo classe Vinho.

[code]@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@Entity
@Table(name=“TBVinho”)
public class Vinho implements Serializable{

/**
 * 
 */
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long IdVinho;
private String NomeVinho;
private String Imagem;

@MapsId
@XmlTransient
 @ManyToOne
    @JoinColumn(name="IdProdutor")
private Produtor Produtor;

@MapsId
@XmlTransient
@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="IdOrigem")	
private Origem Origem;

@MapsId
@XmlTransient
@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="IdTipoUva")	
private TipoUva TipoUva;

@MapsId
@XmlTransient
@ManyToOne(fetch=FetchType.EAGER)
 	@JoinColumn(name="IdTipoVinho")
private TipoVinho TipoVinho;

private int Safra;

private Double Preco;	

[/code]

Abaixo código da classe TipoVinho.

[code]@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@Entity
@Table(name=“TBTipoVinho”)
public class TipoVinho implements Serializable{

/**
 * 
 */
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long IdTipoVinho;
private String TipoVinho;
@XmlTransient
@OneToMany(targetEntity = Vinho.class,
        cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="TipoVinho")
private List<Vinho> Vinho;

[/code]

Não entendí muito bem, você gostaria de trafegar também o TipoVinho, é isso? Se for o caso, basta retirar a anotação @XmlTransient do campo, assim:

@MapsId  
@ManyToOne(fetch=FetchType.EAGER)  
@JoinColumn(name="IdTipoVinho")  
private TipoVinho TipoVinho;  

[]'s

[quote=Alexandre Saudate]Não entendí muito bem, você gostaria de trafegar também o TipoVinho, é isso? Se for o caso, basta retirar a anotação @XmlTransient do campo, assim:

@MapsId  
@ManyToOne(fetch=FetchType.EAGER)  
@JoinColumn(name="IdTipoVinho")  
private TipoVinho TipoVinho;  

[]'s[/quote]

Seria isso mas o Json ficou muito grande, eu resolvi criar uma nova classe que carregue toda essa informação, segue abaixo:

[code]@XmlRootElement
public class ListaVinho {

private Long IdVinho;
private String NomeVinho;
private String Imagem;
private Long IdProdutor;
private Long IdOrigem;
private Long IdTipoUva;
private Long IdTipoVinho;
private int  Safra;
private Double Preco;

[/code]

Depois no meu resource eu cria uma lista e preenche essa classe e envio via Json


        @GET
	@Produces({ MediaType.APPLICATION_JSON })
	public List<ListaVinho> getVinhos(){
		return getAllVinhos();
	}

public List<ListaVinho> getAllVinhos(){
		
		List<Vinho> list = vinhoRepository.findAll();
		List<ListaVinho> createLista = new ArrayList<ListaVinho>();
		  for(Vinho v : list){
			  ListaVinho vinho = new ListaVinho();
			  	vinho.setIdVinho(v.getIdVinho());
			  	vinho.setNomeVinho(v.getNomeVinho());
			  	vinho.setIdProdutor(v.getProdutor().getIdProdutor());
			  	vinho.setIdOrigem(v.getOrigem().getIdOrigem());
			  	vinho.setIdTipoUva(v.getTipoUva().getIdTipoUva());
			  	vinho.setIdTipoVinho(v.getTipoVinho().getIdTipoVinho());
			  	vinho.setSafra(v.getSafra());
			  	vinho.setPreco(v.getPreco());
			  	vinho.setImagem(v.getImagem());
			  	createLista.add(vinho);
		  }
	   return createLista;
	}

Que o Json fica mais fácil de enviar:
{“listaVinho”:[{“idOrigem”:“1”,“idProdutor”:“22”,“idTipoUva”:“1”,“idTipoVinho”:“1”,“idVinho”:“1”,“nomeVinho”:“teste”,“preco”:“20.0”,“safra”:“2000”}

Obrigado pela a resposta.

Não querendo abusar da sua boa vontade mas dando uma pesquisa vi um post que você respondeu de como enviar uma imagem usando o seguinte código:

@GET
	@Produces("image/png")
	public byte[] produces() throws IOException {
		File file = new File("D:\\imagem.png");
		FileInputStream fis = new FileInputStream(file);
		byte[] data = new byte[fis.available()];
		fis.read(data);
		return data;
	}

Como eu poderia recuperar essa imagem do outro lado que no meu caso é em um app. Android.
Você sabe como eu poderia fazer.
Desde já obrigado.

Bom… não sei dizer, porque não conheço nada de Android. No Java comum, você faz como uma consulta qualquer. No final, é só fazer o parse para byte[].

[]'s