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:
@Override
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