@SqlResultSetMapping usndo Spring Booot

Tenho 3 tabelas:

  • Pessoas
  • Produtos
  • Pedidos (tem fk de pessoas e produtos)

Gostaria de retornar todos os pedidos de uma pessoa !

Segue o código:

RESOURCE.JAVA

 /**
     * Get single Pessoas
     * @param nome
     * @return pessoas
     */
    @GET
    @Consumes("application/json; charset=UTF-8")
    @Path("/buscar/{nome}")
    public Pessoas getPessoasNome(@PathParam("nome") String nome) {
        Pessoas pessoas = pessoasDao.findByNome(nome);
     
        if (pessoas == null) {
            throw new WebApplicationException((Response.Status.NOT_FOUND));
        }
        return pessoas;
    }

====================ENTIDADE.JAVA==========================

/**
 *
 * @author jr
 */
@Entity
@Table(name = "pessoas", catalog = "betha", schema = "public")
@SqlResultSetMapping(
    name = "teste",
    entities = {
        @EntityResult(
            entityClass = Pessoas.class,
            fields = {
                @FieldResult(name = "idpessoa", column = "idpessoa"),
                @FieldResult(name = "nome", column = "nome"),
                @FieldResult(name = "cpf", column = "cpf"),
                @FieldResult(name = "email", column = "email")}),
        @EntityResult(
            entityClass = Pedidos.class,
            fields = {
                @FieldResult(name = "idpedidos", column = "idpedidos"),
                @FieldResult(name = "status", column = "status")})}
)
@SqlResultSetMappings({
    @SqlResultSetMapping(
            name = "teste2",
            classes = {
                @ConstructorResult(
                        targetClass = PessoasVO.class,
                        columns = {
                            @ColumnResult(name = "idpessoa"),
                            @ColumnResult(name = "nome")
                        }
                )
            }
    )

})
public class Pessoas implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "idpessoa")
    private Long idpessoa;
    
    @NotNull
    @Column(name = "nome")
    private String nome;
    
    @Column(name = "cpf")
    private String cpf;
    
    @OrderBy(clause = "datacadastro") // Ordenando por data de cadastro
    @Column(name = "datacadastro")
    @Temporal(TemporalType.DATE)
    private Date datacadastro;
    
    @Column(name = "email")
    private String email;
    
    @Column(name = "telefone")
    private String telefone;
    
    @Column(name = "status")
    private String status;
    
    @OneToMany(fetch = FetchType.LAZY)
    @JoinColumn(name = "fkpessoas", referencedColumnName = "idpessoa")
    private Set<Pedidos> pedidosList;

    public Pessoas() {
        //todo
    }
    
    public Pessoas(String nome, String cpf, Date datacadastro, String email, String telefone) {
        this.nome = nome;
        this.cpf = cpf;
        this.datacadastro = datacadastro;
        this.email = email;
        this.telefone = telefone;
    }
    
////GET SET

=====================MEU DAO======================

@Transactional(readOnly = true)
public interface PessoasDao extends JpaRepository<Pessoas, Long> {
    @Query(nativeQuery = true, name="sqlresultpedidos", value = "SELECT\n" +
"        public.pessoas.*,\n" +
"        public.pedidos.datapedido,\n" +
"        public.pedidos.quantidade,\n" +
"        public.pedidos.nota,\n" +
"        public.produtos.descricao,\n" +
"        public.produtos.valorunitario,\n" +
"        public.produtos.valorunitario * public.pedidos.quantidade AS total         \n" +
"    FROM\n" +
"        public.pedidos           \n" +
"    JOIN\n" +
"        public.pessoas              \n" +
"            ON public.pedidos.fkpessoas = public.pessoas.idpessoa           \n" +
"    JOIN\n" +
"        public.produtos              \n" +
"            ON public.pedidos.fkprodutos = public.produtos.idprodutos           \n" +
"    WHERE\n" +
"        public.pessoas.nome = :nome      \n" +
"    GROUP BY\n" +
"        public.produtos.descricao,\n" +
"        public.pedidos.datapedido,\n" +
"        public.pedidos.quantidade,\n" +
"        public.produtos.valorunitario,\n" +
"        public.pessoas.cpf,\n" +
"        public.pessoas.datacadastro,\n" +
"        public.pessoas.email,\n" +
"        public.pessoas.status,\n" +
"        public.pessoas.telefone,\n" +
"        public.pedidos.nota,\n" +
"        public.pessoas.idpessoa,\n" +
"        public.pedidos.quantidade,\n" +
"        total")
               
       Pessoas findByNome(@Param("nome") String nome);
}

MEU RESULTADO SAI ASSIM :slight_smile:

{"idpessoa":1,"nome":"MARIA","cpf":"64525430248","datacadastro":"2018-02-02","email":"email@gmail.com","telefone":"8591254360","status":"A","pedidosList":null}