Dificuldade em filtrar uma classe neta pelo Criteria

2 respostas
javahibernate
Rmaragno1

Bom dia!

Tenho as seguintes classes:

public class BaseDatas implements Serializable {

@Id
@OneToOne
private Base base;

@Temporal(value = TemporalType.DATE)	//primeira, antes do despacho
private Date inclusao;

}

public class Base implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;

@ManyToOne
private Status status;

}

public class Status implements Serializable{

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;

}

Gostaria de fazer um filtro no id de status, utilizando Criteria (por sql e hql eu consigo normalmente), mas não sei como chegar… sempre da unknown colum.

assim não funciona:

Criteria c = getSession().createCriteria(BaseDatas.class)

.createCriteria(“base”, “kt”)

.createCriteria(“status”, “status”)

.add( <a href="http://Restrictions.ne">Restrictions.ne</a>(“id”, 199) );
Assim também não:

Criteria c = getSession().createCriteria(BaseDatas.class);

Criteria s = c.createCriteria(“base.status”);	

Criteria s2 = s.createCriteria(“status”);	

s2.add(<a href="http://Restrictions.ge">Restrictions.ge</a>(“id”, 60));

por ai vai…

O select é fácil…:
SELECT aec_BaseDatas.inclusao, aec_Base.id, aec_Base.status_id
FROM aec_BaseDatas INNER JOIN aec_Base ON aec_BaseDatas.base_id = aec_Base.id
WHERE ((aec_Base.status_id)>=60 And (aec_Base.status_id)<>199);

2 Respostas

fbirf

Olá!

Tenta da seguinte forma:

Criteria c = getSession().createCriteria(BaseDatas.class)
.createAlias(base, aliasBase)
.createAlias(aliasBase.status, aliasStatus)
.add( Restrictions.ne(aliasStatus.id, 199) );

O método createAlias() da classe Criteria corresponde ao JOIN. Você passa o nome do ATRIBUTO da entidade e o nome do ALIAS (apelido) como parâmetros neste método.

criteria.createAlias("ATRIBUTO","ALIAS");

Espero ter ajudado. Boa sorte!

javaflex

Muito mais fácil e eficiente. Pq complicar com Criteria entao?

Criado 11 de dezembro de 2018
Ultima resposta 19 de dez. de 2018
Respostas 2
Participantes 3