Estou com uma consulta trazendo somente o primeiro registro e este registro sendo repetido, tantas vezes quanto a quantidade de registros retornado pelo sql, o sql está correto, se eu rodar ele no assistente do banco de dados ele retorna os registro corretamente, porem no retorno gerado em json que o postman mostra, ele traz somente o primeiro registro, e este registro, repetido tantas vezes quanto a quantidade de registros retornado.
Meu model está assim:
package com.saojudas.contasapagar.api.model;
import java.math.BigDecimal;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
@Entity
@Table(name = "itenspedido")
public class Itenspedido {
@Id
@NotNull
private Long codigo_cheque;
@NotNull
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long seq;
private BigDecimal vlrunit;
private BigDecimal proporcao;
private BigDecimal vlritem;
private BigDecimal qtd;
@NotNull
@ManyToOne
@JoinColumn(name = "codigo")
private Produtos produtos;
public Long getSeq() {
return seq;
}
public void setSeq(Long seq) {
this.seq = seq;
}
public BigDecimal getVlrunit() {
return vlrunit;
}
public void setVlrunit(BigDecimal vlrunit) {
this.vlrunit = vlrunit;
}
public BigDecimal getProporcao() {
return proporcao;
}
public void setProporcao(BigDecimal proporcao) {
this.proporcao = proporcao;
}
public BigDecimal getVlritem() {
return vlritem;
}
public void setVlritem(BigDecimal vlritem) {
this.vlritem = vlritem;
}
public BigDecimal getQtd() {
return qtd;
}
public void setQtd(BigDecimal qtd) {
this.qtd = qtd;
}
public Produtos getProdutos() {
return produtos;
}
public void setProdutos(Produtos produtos) {
this.produtos = produtos;
}
public Long getCodigo_cheque() {
return codigo_cheque;
}
public void setCodigo_cheque(Long codigo_cheque) {
this.codigo_cheque = codigo_cheque;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((codigo_cheque == null) ? 0 : codigo_cheque.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Itenspedido other = (Itenspedido) obj;
if (codigo_cheque == null) {
if (other.codigo_cheque != null)
return false;
} else if (!codigo_cheque.equals(other.codigo_cheque))
return false;
return true;
}
}
o repository está assim
package com.saojudas.contasapagar.api.repository.itenspedido;
import java.util.List;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import com.saojudas.contasapagar.api.model.Itenspedido;
import com.saojudas.contasapagar.api.repository.filter.ItenspedidoFilter;
public interface ItenspedidoRepositoryQuery {
public Page<Itenspedido> filtrar(ItenspedidoFilter itenspedidoFilter, Pageable pageable);
public List<Itenspedido> porCheque(ItenspedidoFilter itenspedidoFilter);
}
o repositoryimpl
package com.saojudas.contasapagar.api.repository.itenspedido;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import com.saojudas.contasapagar.api.model.Itenspedido;
import com.saojudas.contasapagar.api.model.Itenspedido_;
import com.saojudas.contasapagar.api.model.Produtos_;
import com.saojudas.contasapagar.api.repository.filter.ItenspedidoFilter;
public class ItenspedidoRepositoryImpl implements ItenspedidoRepositoryQuery {
@PersistenceContext
private EntityManager manager;
@Override
public List<Itenspedido> porCheque(ItenspedidoFilter itenspedidoFilter){
CriteriaBuilder builder = manager.getCriteriaBuilder();
CriteriaQuery<Itenspedido> criteria = builder.createQuery(Itenspedido.class);
Root<Itenspedido> root = criteria.from(Itenspedido.class);
Predicate[] predicates = criarRestricoes(itenspedidoFilter, builder, root);
criteria.where(predicates);
TypedQuery<Itenspedido> query = manager.createQuery(criteria);
return query.getResultList();
}
@Override
public Page<Itenspedido> filtrar(ItenspedidoFilter itenspedidoFilter, Pageable pageable) {
CriteriaBuilder builder = manager.getCriteriaBuilder();
CriteriaQuery<Itenspedido> criteria = builder.createQuery(Itenspedido.class);
Root<Itenspedido> root = criteria.from(Itenspedido.class);
/*Predicate[] predicates = criarRestricoes(itenspedidoFilter, builder, root);
criteria.where(predicates);*/
Predicate[] predicates = criarRestricoes(itenspedidoFilter, builder, root);
criteria.where(predicates);
TypedQuery<Itenspedido> query = manager.createQuery(criteria);
adicionarRestricoesDePaginacao(query, pageable);
return new PageImpl<>(query.getResultList(), pageable, total(itenspedidoFilter));
}
private Predicate[] criarRestricoes(ItenspedidoFilter itenspedidoFilter, CriteriaBuilder builder,
Root<Itenspedido> root) {
List<Predicate> predicates = new ArrayList<>();
predicates.add(builder.equal(root.get(Itenspedido_.codigo_cheque), itenspedidoFilter.getCodigo_cheque()));
return predicates.toArray(new Predicate[predicates.size()]);
}
private void adicionarRestricoesDePaginacao(TypedQuery<?> query, Pageable pageable) {
int paginaAtual = pageable.getPageNumber();
int totalRegistrosPorPagina = pageable.getPageSize();
int primeiroRegistroDaPagina = paginaAtual * totalRegistrosPorPagina;
query.setFirstResult(primeiroRegistroDaPagina);
query.setMaxResults(totalRegistrosPorPagina);
}
private Long total(ItenspedidoFilter itenspedidoFilter) {
CriteriaBuilder builder = manager.getCriteriaBuilder();
CriteriaQuery<Long> criteria = builder.createQuery(Long.class);
Root<Itenspedido> root = criteria.from(Itenspedido.class);
Predicate[] predicates = criarRestricoes(itenspedidoFilter, builder, root);
criteria.where(predicates);
criteria.select(builder.count(root));
return manager.createQuery(criteria).getSingleResult();
}
public List<Itenspedido> porCheque(Long codigo_cheque) {
CriteriaBuilder criteriaBuilder = manager.getCriteriaBuilder();
CriteriaQuery<Itenspedido> criteriaQuery = criteriaBuilder.
createQuery(Itenspedido.class);
Root<Itenspedido> root = criteriaQuery.from(Itenspedido.class);
criteriaQuery.select(criteriaBuilder.construct(Itenspedido.class,
root.get(Itenspedido_.seq),
root.get(Itenspedido_.codigo_cheque),
root.get(Itenspedido_.produtos).get(Produtos_.nome),
root.get(Itenspedido_.proporcao),
root.get(Itenspedido_.qtd),
root.get(Itenspedido_.vlritem),
root.get(Itenspedido_.vlrunit)
));
criteriaQuery.where(
criteriaBuilder.equal(root.get(Itenspedido_.codigo_cheque), codigo_cheque));
TypedQuery<Itenspedido> typedQuery = manager
.createQuery(criteriaQuery);
return typedQuery.getResultList();
}
}
o resource assim
package com.saojudas.contasapagar.api.resource;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.saojudas.contasapagar.api.model.Itenspedido;
import com.saojudas.contasapagar.api.repository.ItenspedidoRepository;
import com.saojudas.contasapagar.api.repository.filter.ItenspedidoFilter;
@RestController
@RequestMapping("/itenspedido")
public class ItenspedidoResource {
@Autowired
private ItenspedidoRepository itenspedidoRepository;
@GetMapping
@PreAuthorize("hasAuthority('ROLE_PESQUISAR_CHEQUE') and #oauth2.hasScope('read')")
public Page<Itenspedido> pesquisar(ItenspedidoFilter itenspedidoFilter, Pageable pageable) {
return itenspedidoRepository.filtrar(itenspedidoFilter, pageable);
}
@GetMapping("/{codigo_cheque}")
@PreAuthorize("hasAuthority('ROLE_PESQUISAR_CHEQUE') and #oauth2.hasScope('read')")
public List<Itenspedido> porCheque(ItenspedidoFilter itenspedidoFilter) {
return itenspedidoRepository.porCheque(itenspedidoFilter);
}
}
o que estou fazendo de errado para isto acontecer ?