Dificuldade em filtrar uma classe neta pelo Criteria

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( Restrictions.ne(“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(Restrictions.ge(“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);

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!

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

1 curtida