GARANTIR DESCONTO

Fórum Estou tendo problema com o relacionamento bidirecional. #594945

18/06/2018

0

Estou tendo problema com o relacionamento bidirecional. Quando não há relacionamento o Postman retorna o JSON corretamente, mas quando uso o relacionamento @OneToMany vem a exceção. O @JsonIgnore não funciona, inclusive fiz teste em campos não relacionados e o JsonIgnore também não funciona.
Estou usando o EclipseLink ao invés do Hibernate.

Classe:
package model;

import com.fasterxml.jackson.annotation.JsonIgnore;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import java.util.List;
import javax.persistence.FetchType;

/**
*
* @author luiz
*/
@Entity
public class Proprietario implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
private String endereco;
@OneToMany(mappedBy = "proprietario", fetch = FetchType.EAGER)
@JsonIgnore
private List<Animal> animais;

Classe Animal:

import com.fasterxml.jackson.annotation.JsonIgnore;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

/**
*
* @author luiz
*/
@Entity
public class Animal implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
private Integer idade;

@ManyToOne(fetch = FetchType.EAGER)
@JsonIgnore
private Proprietario proprietario;

Dao:
package dao;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import model.*;

/**
*
* @author acg
*/
@Stateless
public class ProprietarioDao {

@PersistenceContext
EntityManager em;

public ProprietarioDao() {
}

public void gravar(Proprietario proprietario) {
em.persist(proprietario);
}

public void gravar(Animal animal) throws Exception{

if (animal.getIdade()>20) {
throw new Exception ("Nao pode animal com mais de 20 anos");
}
em.persist(animal);
}

public List<Proprietario> get() {
Query q = em.createQuery("select p from Proprietario p order by p.nome");
return q.getResultList();
}
}

Rest:
package service;

import dao.ProprietarioDao;
import java.util.List;
import javax.ejb.EJB;
import javax.inject.Named;
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 javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import model.Animal;
import model.Proprietario;

/**
*
* @author giovannicolonese
*/
@Named
@Path("proprietario")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class ProprietarioRes {

@EJB
ProprietarioDao daoProprietario;
@GET
@Path("listarproprietarios")
public List<Proprietario> getProprietarios() {
return daoProprietario.get();
}


Essa dúvida foi gerada a partir de um comentário no curso Web services RESTful em Java: Trabalhando com subrecursos no Jersey
Luiz Vieira

Luiz Vieira

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar