Criteria Distinct

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!

Encontrei um código mas não sei como definir qual campo usar para o distinct:

[code]
public List retornaSistemas() {

	Criteria criteria = session.createCriteria(Demanda.class);   
	
		return criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();
	
}[/code]

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

1 curtida

Beleza, funcionou.

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

Valeu!

1 curtida

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:

[quote=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: [/quote]

OK, Obrigado!

[quote=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: [/quote]

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

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:

[quote=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: [/quote]

A, entendi…

Tenho a classe Entrega:

[code]@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;[/code]

e a classe Demanda:

[code]@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;

[/code]

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

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.

[code]@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[/code]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: