Tenho a seguinte consulta:
[code]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[/code]
Mas fazendo uso do criteria, nao consigo simular a mesma situação…=\
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.
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
[code]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=? //[/code]
Classe titulo:
[code]@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;
}[/code]
Classe cliente:
[code]@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;
}[/code]
classe pedido:
[code]@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;
}[/code]