Consulta Simples HQL

3 respostas
E

Olá galera, estou começando agora com JPA e gostaria que voces me dessem uma forcinha com a consulta que estou tentando fazer...
É o seguinte, eu tenho uma classe que distribui minhas EntityManager, e possuo 3 classes das quais eu gostaria de fazer a consulta.
Eu ainda nao tenho certeza se o mapeamento das 3 classes está correto. Sào elas: Fornecedor, PedidoCompra e ItemCompra.
Oque eu gostaria de fazer é o seguinte: Passar um fornecedor X p/ o método, e o mesmo me retorna a uma lista de pedidos cujo o fornecedor seja o passado como parametro.

Código
package com.perfaco.modelo;


import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;


	
@Entity
public class Fornecedor implements Serializable {
	@Id @GeneratedValue
	private Long id;
	private String nome;
	private String endereco;
	private String telefone;
	
	@OneToMany(targetEntity=PedidoCompra.class, fetch=FetchType.LAZY,cascade=CascadeType.ALL)
	private List<PedidoCompra> pedidos;
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getEndereco() {
		return endereco;
	}
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}
	public String getTelefone() {
		return telefone;
	}
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}
/*	public List<Produto> getProdutos() {
		return produtos;
	}
	public void setProdutos(List<Produto> produtos) {
		this.produtos = produtos;
	}*/
	public List<PedidoCompra> getPedidos() {
		return pedidos;
	}
	public void setPedidos(List<PedidoCompra> pedidos) {
		this.pedidos = pedidos;
	}

}
package com.perfaco.modelo;

import java.io.Serializable;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
@Entity
public class ItemCompra implements Serializable {
	
	@Id
	@GeneratedValue
	private Long id;
	@ManyToOne(fetch=FetchType.EAGER, targetEntity=PedidoCompra.class)
	private PedidoCompra pedido;
	@ManyToOne(fetch=FetchType.EAGER)
	private Produto produto;
	private Integer quantidade;
	private Double valorUnitario;
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public PedidoCompra getPedido() {
		return pedido;
	}
	public void setPedido(PedidoCompra pedido) {
		this.pedido = pedido;
	}
	public Produto getProduto() {
		return produto;
	}
	public void setProduto(Produto produto) {
		this.produto = produto;
	}
	public Integer getQuantidade() {
		return quantidade;
	}
	public void setQuantidade(Integer quantidade) {
		this.quantidade = quantidade;
	}
	public Double getValorUnitario() {
		return valorUnitario;
	}
	public void setValorUnitario(Double valorUnitario) {
		this.valorUnitario = valorUnitario;
	}

}
package com.perfaco.modelo;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;



@Entity
public class PedidoCompra implements Serializable {
	@Id @GeneratedValue
	private Long id;
	private Date dataCompra;
	@OneToOne(fetch=FetchType.LAZY)
	private Fornecedor fornecedor;
	@OneToMany(targetEntity=ItemCompra.class, cascade=CascadeType.ALL, fetch=FetchType.EAGER, mappedBy="pedido")
	private List<ItemCompra> itens;
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public Date getDataCompra() {
		return dataCompra;
	}
	public void setDataCompra(Date dataCompra) {
		this.dataCompra = dataCompra;
	}
	public Fornecedor getFornecedor() {
		return fornecedor;
	}
	public void setFornecedor(Fornecedor fornecedor) {
		this.fornecedor = fornecedor;
	}
	public List<ItemCompra> getItens() {
		return itens;
	}
	public void setItens(List<ItemCompra> itens) {
		this.itens = itens;
	}
	
}

Obrigado a todos!!

3 Respostas

direisc

Você pode buscar os pedidos com um determinado fornecedor assim:

public List<PedidoCompra> buscarPedidosDoFornecedor(Fornecedor fornecedor) { String hql = "SELECT pc FROM PedidoCompra pc WHERE pc.fornecedor = :fornecedor"; Query consulta = this.session.createQuery(hql); consulta.setParameter("fornecedor", fornecedor); return consulta.list(); }

pelo menos eu uso dessa maneira e tem funcionado :roll:

E

Excelente! Funcionou, meu problema era a passagem de parametro (setParameter), mas agora está resolvido!
Obrigado!

Rodrigo_Sasaki

eliezerbs9, tem como você editar o seu primeiro post desse tópico e adicionar a tag [RESOLVIDO], por favor?

Eu fui lendo o tópico só pra chegar no final e ver que sua dúvida ja tinha sido sanada, aposto que outros fizeram o mesmo.

obrigado!

Criado 8 de maio de 2012
Ultima resposta 8 de mai. de 2012
Respostas 3
Participantes 3