Criteria Distinct

9 respostas
Fmgasparino

Pessoal, preciso na minha aplicação trazer um campo as opcoes para uma operação obtida atravez de um distinct dentro da minha tabela demanda.
Alguem sabe como fazer usando Criteria?

Obrigado!

9 Respostas

Fmgasparino
Encontrei um código mas não sei como definir qual campo usar para o distinct:
public List<Demanda> retornaSistemas() {
		
		Criteria criteria = session.createCriteria(Demanda.class);   
		
			return criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();
		
	}
von.juliano

criteria.setProjection(Projections.distinct(Projections.property("campo")));Blz? Flw! :thumbup:

Fmgasparino

Beleza, funcionou.

Estou muito confuso com Projection, conhece algum post bom sobre, ou consegue me ajudar a clarear?

Valeu!

von.juliano

A documentação do Hibernate é bem rica, e também aprendi muito lendo o Java Persistence With Hibernate. Não é tão complicado quanto parece :smiley:

Blz? Flw! :thumbup:

Fmgasparino

von.juliano:
A documentação do Hibernate é bem rica, e também aprendi muito lendo o Java Persistence With Hibernate. Não é tão complicado quanto parece :smiley:

Blz? Flw! :thumbup:

OK, Obrigado!

Fmgasparino

von.juliano:
A documentação do Hibernate é bem rica, e também aprendi muito lendo o Java Persistence With Hibernate. Não é tão complicado quanto parece :smiley:

Blz? Flw! :thumbup:

Tenho 2 classes onde cada tem o campo x. Preciso pegar todos registros da tabela 2 baseado em uma infomacao que tem na tabela 1.
Usando o projection, consigo fazer isso? Não consegui dizer que sim analisando a documentação.

Obrigado

von.juliano

A finalidade de Projections é outra, voltada para selecionar certos campos, agrupar, contar, somar, etc.

Poste as classes que você falou pra ficar mais fácil explicar como fazer o que perguntou.

Flw! :thumbup:

Fmgasparino
von.juliano:
A finalidade de Projections é outra, voltada para selecionar certos campos, agrupar, contar, somar, etc.

Poste as classes que você falou pra ficar mais fácil explicar como fazer o que perguntou.

Flw! :thumbup:

A, entendi...

Tenho a classe Entrega:
@Entity
public class Entrega {
	static Logger log = Logger.getLogger(Entrega.class);

	@Id
	@GeneratedValue
	private int id;
	@Index(name = "numeroDemandaEntrega")
	private String numeroDemanda;
	@Index(name = "numeroServicoEntrega")
	private String numeroServico;
	@Index(name = "numeroOSEntrega")
	private String numeroOS;
	@Index(name = "numeroEntrega")
	private String numeroEntrega;
	private String situacao;
	// private String percentual;
	private double valorEstimado;
	@Index(name = "dataPrevistaEntrega")
	private Date dataPrevista;
	@Index(name = "dataEfetivaEntrega")
	private Date dataEfetiva;
	private String codigoOS;
e a classe Demanda:
@Entity
public class Demanda {
	static Logger log = Logger.getLogger(Demanda.class);

	@Id
	private String numeroDemanda;
	private String demanda;
	private String area;
	private String sistema;
	private String situacao;
	private String totalPF;
	private Date dtInclusaoDemanda;
	@Index(name = "DemandaFilial")
	private String filial;
	@Index(name = "DemandaEmpresa")
	private String empresa;

O campo numeroDemanda possui nas duas, e eu preciso pegar todos registros de entrega filtrado por filial, item somente obtido na demanda, o que me obriga a fazer um JOIN.
Entendeu o problema?

VLW

von.juliano
O problema é que você está pensando muito voltado para a estrutura do banco, e não deve pensar assim, mas como os objetos se relacionam.
@Entity
public class Demanda {

    @Id
    private String numeroDemanda;
    
    @OneToMany
    private List<Entrega> entregas;
}

@Entity
public class Entrega {

	@Id
	@GeneratedValue
	private int id;

	@ManyToOne
	private Demanda demanda;
}
// gets, sets e demais atributos omitidos; estou considerando que uma demanda tem muitas entregas
Criteria é uma pesquisa baseada em objetos, e se vc quer todas as entregas de determinada demanda, fica assim:
Criteria c = session.createCriteria(Entrega.class);
c.add(Restrictions.eq("demanda", demanda));
return c.list();
Procure estudar a forma adequada de usar o Hibernate, a documentação vai te ajudar com isso!

Flw! :thumbup:

Criado 7 de outubro de 2010
Ultima resposta 7 de out. de 2010
Respostas 9
Participantes 2