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