Left Join usando criteria

2 respostas
A

Tenho a seguinte consulta:

select this_.id_cliente as y0_, this_.razao_social as y1_, this_.cidade as y2_, this_.nome_fantasia as y3_, 
max(ped1_.data_pedido) as y4_ 
from cliente this_ 
inner join pedido ped1_ on this_.id_cliente=ped1_.id_cliente 

left outer join titulo t4_ on this_.id_cliente=t4_.id_cliente and t4_.data_vencimento=?     // USAR ESTE AND COM CRITERIA

inner join vendedor_cliente vc2_ on this_.id_cliente=vc2_.id_cliente 
inner join vendedor v3_ on vc2_.id_vendedor=v3_.id_vendedor 
where ped1_.data_pedido between ? and ? and v3_.id_vendedor=? 
group by this_.id_cliente, this_.razao_social, this_.cidade, this_.nome_fantasia order by y3_ asc
Mas fazendo uso do criteria, nao consigo simular a mesma situação..=\

2 Respostas

drsmachado

Criteria considera a relação entre duas classes para criar as condições JOIN (INNER, LEFT, RIGHT, OUTER e suas combinações).
Portanto, não temos como dizer como melhorar sem saber as classes envolvidas e o que você está tentando fazer.

A

Vou tentar explicar a situação, quero mostrar meus clientes que fizeram pedido em determinado periodo e que estão adimplentes, ou seja, não tem titulos vencidos;
Por isso usei o left join com a tabela de titulos.
Mas se deixo a comparaçao de data de vencimento do titulo na clausula where ele nao traz nada, e nao consegui colocar o and junto do left join.
Se puderes analisar e dizer se o que quero é possivel usando criteria. Valeu

left outer join titulo t4_ on this_.id_cliente=t4_.id_cliente  // and t4_.data_vencimento=?     // USAR ESTE AND COM CRITERIA

se mudo a posiçao do meu data de vencimento ele nao traz nada

where ped1_.data_pedido between ? and ? and v3_.id_vendedor=? and t4_.data_vencimento=? 

  //   and t4_.data_vencimento=? //
Classe titulo:
@javax.persistence.Entity
@javax.persistence.Table(name = "titulo")
public class Titulo implements Entidade {

	private static final long serialVersionUID = -6831078183847196839L;

	@Getter
	@Setter
	private br.com.supervisao.entidade.Cliente cliente;


}
Classe cliente:
@javax.persistence.Entity
@javax.persistence.Table(name = "cliente")
public class Cliente implements Entidade {

	private static final long serialVersionUID = 550746169557515838L;

	@javax.persistence.Id
	@javax.persistence.Column(name = "id_cliente")
	@Getter
	@Setter
	private java.lang.Long id;

	@javax.persistence.OneToMany(mappedBy = "cliente")
	@Getter
	@Setter
	private java.util.Set<Titulo> titulos;

	@javax.persistence.OneToMany(mappedBy = "cliente", fetch = FetchType.LAZY)
	@Getter
	@Setter
	private java.util.Set<Pedido> pedidos;

}
classe pedido:
@javax.persistence.Entity
@javax.persistence.Table(name = "pedido")
public class Pedido implements Entidade {
	private static final long serialVersionUID = -5160847491057668483L;

	@javax.persistence.Column(name = "data_pedido", nullable = false, length = 13, unique = false)
	@Getter
	@Setter
	private java.util.Date dataPedido;

	@javax.persistence.ManyToOne
	@javax.persistence.JoinColumns({ @javax.persistence.JoinColumn(name = "id_cliente"), })
	@Getter
	@Setter
	private br.com.supervisao.entidade.Cliente cliente;

}
Criado 25 de abril de 2013
Ultima resposta 25 de abr. de 2013
Respostas 2
Participantes 2