Help Inner Join com HQL Urgente

4 respostas
E

Boa noite pessoal do GUJ,

Estou com um problema cm HQL em um projeto muito grande, e como eu entrei no meio do projeto, não posso fazer com SQL ou criteria
e não manjo nada de hql

Quero saber como posso fazer a seguinte consulta com hql

Select * from compra INNER JOIN itemCompra on compra.idCompra = itemCompra.idCompra inner join produto on produto.idProduto = itemCompra.idProduto where itemCompra.statusItem = 1 and compra.status = 1

segue um diagrama (apenas para exemplo, não é o meu problema real )

Obrigado

4 Respostas

yorgan

Pode postar as classes dessas entidades?
Não precisa ser completa, mande só os atributos de cada uma.

[]'s
Daniel

georgesq

pq vc não monta com Criteria e deixa o Hibernate resolver?

[s]

denislima

Se o objeto compra ja conter o objeto itemCompra e o objeto produto. So precisa fazer isso:

from 
    Compra compra 
where
    compra.itemCompra.statusItem = 1
and 
    compra.status = 1

tenta ai… fallows

E

Na verdade compra contem uma List de itensCompra e itensCompra contem, Compra e Produto, e produto contém um List de itensCompra

mas, pessoal muita atenção para o detalhe, esse é só um exemplo,

as classes ficariam assim:
@Entity(name="compra")
public class Compra {
	private List<ItemCompra> itemCompras;
	private int id;
	private int status;

	public void setItemCompras(List<ItemCompra> itemCompras) {
		this.itemCompras = itemCompras;
	}

	@OneToMany(mappedBy="compra")
	public List<ItemCompra> getItemCompras() {
		return itemCompras;
	}

	public void setId(int id) {
		this.id = id;
	}

	public int getId() {
		return id;
	}

	public void setStatus(int status) {
		this.status = status;
	}

	public int getStatus() {
		return status;
	}

}
@Entity(name = "itemcompra")
public class ItemCompra {
	private int idItemCompra;
	private Compra compra;
	private Produto produto;
	private int statusItem;

	public int getIdItemCompra() {
		return idItemCompra;
	}
	public void setIdItemCompra(int idItemCompra) {
		this.idItemCompra = idItemCompra;
	}
	@ManyToOne
	@JoinColumn(name="idCompra")
	public Compra getCompra() {
		return compra;
	}
	public void setCompra(Compra compra) {
		this.compra = compra;
	}
	@ManyToOne
	@JoinColumn(name="idProduto")
	public Produto getProduto() {
		return produto;
	}
	public void setProduto(Produto produto) {
		this.produto = produto;
	}
	public int getStatusItem() {
		return statusItem;
	}
	public void setStatusItem(int statusItem) {
		this.statusItem = statusItem;
	}


}
@Entity(name="produto")
public class Produto {
	private List<ItemCompra> itemCompras;
	private int id;

	public void setItemCompras(List<ItemCompra> itemCompras) {
		this.itemCompras = itemCompras;
	}

	@OneToMany(mappedBy="produto")
	public List<ItemCompra> getItemCompras() {
		return itemCompras;
	}
	public void setId(int id) {
		this.id = id;
	}
	@Id
	public int getId() {
		return id;
	}
}

O problema é:
como vou fazer isso quando um dos meus atributos é um list?

Criado 23 de fevereiro de 2011
Ultima resposta 24 de fev. de 2011
Respostas 4
Participantes 4