Problema de resultado de consulta recursiva em um N:M

0 respostas
jpajava
brunoties

Olá, estou implementando um relacionamento N:M em um servidor com spring, utilizando REST.

Eu quero listar apenas os equipamentos e suas categorias.

e o resultado da consulta está assim:

{

id: 1,

nome: Empilhadeira,

descricao: 5.0 TON,

categorias: [

{

id: 1,

nome: Dimensões da Maquina AxLxC:,

descricao: 2180MMx1180MMx1900MM,

equipamentos: [

{

id: 1,

nome: Empilhadeira,

descricao: 5.0 TON,

categorias: [

{

id: 1,

nome: Dimensões da Maquina AxLxC:,

descricao: 2180MMx1180MMx1900MM,

equipamentos: [

{

id: 1,

nome: Empilhadeira,

descricao: 5.0 TON,

categorias: [

{

id: 1,

nome: Dimensões da Maquina AxLxC:,

descricao: 2180MMx1180MMx1900MM,

equipamentos: [
Na classe equipamento:

@ManyToMany

@JoinTable(name = equipamentos_categorias, joinColumns = {

@JoinColumn(name = id_equipamento) }, inverseJoinColumns =

{@JoinColumn(name=id_categoria_equipamentos)})

private List categorias;
Na categoria:

@ManyToMany(mappedBy = categorias)

private List equipamentos;
No filtro de pesquisa:

<a class="mention" href="/u/override">@Override</a>

public List filtra(EquipamentoFilter filtro) {

CriteriaBuilder builder = this.manager.getCriteriaBuilder();

CriteriaQuery criteria = builder.createQuery(Equipamento.class);
Root<Equipamento> root = criteria.from(Equipamento.class);

	Predicate[] predicates = criaRestricoes(filtro, builder, root);

	criteria.where(predicates);

	TypedQuery<Equipamento> query = this.manager.createQuery(criteria);

	return query.getResultList();
}

private Predicate[] criaRestricoes(EquipamentoFilter filtro, CriteriaBuilder builder, Root<Equipamento> root) {

	List<Predicate> predicates = new ArrayList<Predicate>();

	if (!StringUtils.isEmpty(filtro.getNome())) {
		predicates.add(builder.like(builder.lower(root.get(Equipamento_.NOME)),
				"%" + filtro.getNome().toLowerCase() + "%"));
	}

	if (!StringUtils.isEmpty(filtro.getDescricao())) {
		predicates.add(builder.like(builder.lower(root.get(Equipamento_.DESCRICAO)),
				"%" + filtro.getDescricao().toLowerCase() + "%"));
	}

	return predicates.toArray(new Predicate[predicates.size()]);
}

Já tentei com e sem o @EntityGraph, puro e com a string do nome da lista de categorias

Criado 29 de agosto de 2019
Respostas 0
Participantes 1