Ola,
O meu problema é o seguinte:
Usando Spring-date, se seu criar uma query nativa, direto no repository. Eu nao preciso fazer nada, crio a projection, e uso ela no retorno do metodo e funciona normalmente. Da forma como esta abaixo.
@Repository
public interface Produtos extends JpaRepository<Produto, Long>, ProdutosQueries {
@Query(value = "select p.idproduto,p.ean,p.descricao, pp.custo, pf.referencia from produto p"
+ " inner join produto_preco pp on p.idproduto=pp.idproduto and pp.id_loja=:idLoja"
+ " left join itensfornecedor pf on p.idproduto=pf.idproduto and"
+ " pf.idfornecedor=:idFornecedor "
+ " where p.ean in (:codigos)" , nativeQuery = true)
public List<TrocaFornecedorItem> listarProdutosPorEan(@Param("codigos") Set<Long> codigos, @Param("idLoja") Long idLoja,
@Param("idFornecedor") Long idFornecedor);
agora se eu retirar esse metodo da Interface repository e coloca-lo numa classe a query nao cria a projection para retorno de maneira alguma, fica dando erro de que nao tem conversor para retorno dos dados. E é dessa forma que nao funciona, vou apenas suprimir o select pq eh um pouco grande
public class ProdutosImpl implements ProdutosQueries {
@PersistenceContext
private EntityManager manager;
@SuppressWarnings("unchecked")
@Override
public List<PedidoCompraItem> listarItensPedidoCompra(ProdutoFilter produtoFilter) {
String sql = "select * from produto";
return manager.createNativeQuery(sql)
.setParameter("idFornecedor", produtoFilter.getIdFornecedor())
.setParameter("idLoja", produtoFilter.getIdLoja())
.setParameter("idProduto", produtoFilter.getIdProduto())
.setParameter("idGrupo", produtoFilter.getIdSecao())
.setParameter("idSubGrupo", produtoFilter.getIdGrupo())
.setParameter("idSubGrupo1", produtoFilter.getIdSubgrupo())
.setParameter("descricao", produtoFilter.getDescricao())
.setParameter("participaCotacao", produtoFilter.getParticipaCotacao())
.setParameter("idFamilia", produtoFilter.getIdFamilia())
.setParameter("idSituacao", produtoFilter.getIdSituacao())
.getResultList();
}
por isso estou abrido o topico tem outra forma de avisar ao EM qual a projection ele vai usar?