JPA, Hibernate, Objeto ao transferir via REST sem uso de DTO perde um outro Objeto pendurado

7 respostas Resolvido
jpajavahibernate
M

Seguinte, a model Cliente e Parecer está assim:
CLIENTE :

@Entity
public class Cliente implements Serializable{

	private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
private String nome;
private Date dataNascimento;
private String telefone;
private String endereco;
@Column(columnDefinition="TEXT")
private String descricao;
@ManyToOne
@JsonBackReference
@JoinColumn(name="usuario_id")
private Usuario usuario;
@OneToMany(fetch=FetchType.EAGER, mappedBy="cliente")
@JsonManagedReference
private List<Parecer> pareceres;
private Integer status;

CLASS PARECER

@Entity
public class Parecer implements Serializable{

	private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
private Date data;
@ManyToOne
@JsonBackReference
@JoinColumn(name="cliente_id")
private Cliente cliente;
private String titulo;
@Column(columnDefinition="TEXT")
private String descricao;

Meu problema é quando eu busco por parecer os clientes vem grudados, mas na hora de mandar o objeto o CLIENTE não vem grudado no array. A solução que achei foi criando DTOs, porém se existir outra só me dizer.

7 Respostas

Lucas_Camara

Como eh sua consulta? Vc informa o parecer para recuperar a lista de clientes? Como está sua consulta?

M

a consulta está correta findById, o objeto parecer vem com o cliente pendurado, porém ao passar via REST o cliente que antes estava pendurado some. Só fica se eu criar uma classe ParecerDTO e passar os parametros do parecer para o ParecerDTO e mandar o ParecerDTO via REST.

Lucas_Camara

Ah sim, o problema entao eh retornar os dados amarrados, com REST. Assim depende de como estão as entidades.

M

Pois é, as entidades estão deste jeito que eu postei, + getters e setters e construtor

javaflex

Retira o @JsonBackReference e coloca @JsonIgnore onde não precisar.

Mas fica mais sob controle e performático escrever o SQL específico pra funcionalidade e usar “DTO”, ao inves de ter esse modelo OO engessado.

M

Eu preciso de todas, esse é o problema, com JsonBackReference e Managed fica melhor, a solução acredito ser utilizar DTO mesmo.

javaflex
Solucao aceita

Sem dúvidas, com DTO fica melhor, atendendo cada funcionalidade de forma otimizada se escrever seu próprio SQL, sem misturar responsabilidades e sem ficar preso a um modelo.

Criado 26 de julho de 2019
Ultima resposta 27 de jul. de 2019
Respostas 7
Participantes 3