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 
{"idpessoa":1,"nome":"MARIA","cpf":"64525430248","datacadastro":"2018-02-02","email":"email@gmail.com","telefone":"8591254360","status":"A","pedidosList":null}