Criteria Distinct

9 respostas
F

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

F
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();
		
	}
V

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

F

Beleza, funcionou.

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

Valeu!

V

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:

F

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!

F

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

V

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:

F
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

V
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