Dúvida sobre Hibernate Criteria e Beans

Opa :smiley:

Tenho um método de renovar senha que se relaciona com a tabela Login:

@Entity
@Table(name="login", schema="public")
@SequenceGenerator(sequenceName="login_id_login_seq", name="login_id_login_seq", allocationSize=1)
public class LoginBean implements Login, Serializable {

LoginDAO:

Criteria criteria = session.createCriteria(LoginBean.class);
criteria.add(Expression.eq("usuario", funcionario.getLogin().getUsuario()));
criteria.add(Expression.eq("email", funcionario.getLogin().getEmail()));
//criteria.add(Expression.eq("CPF", funcionario.getCPF()));

Porém esse CPF, se encontra na classe Funcionario que tem o relacionamento 1-1 com o Login:

@Entity
@Table(name="funcionario", schema="public")
@SequenceGenerator(sequenceName="funcionario_id_funcionario_seq", name="funcionario_id_funcionario_seq", allocationSize=1)
public class FuncionarioBean implements Funcionario, Serializable {

@OneToOne(mappedBy = "funcionario", fetch=FetchType.LAZY)
@Cascade(CascadeType.ALL)
private LoginBean login = new LoginBean();

Eu queria saber como posso adicionar essa expressão na Criteria para que não ocorra erros.

Alguém sabe como posso fazer isso?

[]'s

Ja faz um tempo que nao utilizo Hibernate (os ultimos projetos que participei utilizam queries escritas na mao mesmo). Mas voce tem quem que fazer o relacionamento criando uma “subCriteria”, ex:

   Criteria criteria = session.createCriteria(LoginBean.class);  
   criteria.add(Expression.eq("usuario", funcionario.getLogin().getUsuario()));  
   criteria.add(Expression.eq("email", funcionario.getLogin().getEmail()));  
   //criando a subCriteria
   Criteria subCriteria = criteria.createCriteria(FuncionarioBean.class);
   subCriteria.add(Expression.eq("CPF", funcionario.getCPF()));
  //executa a subCriteria

Senão me engano isso resolve o seu problema.

Mas como que executo as 2 criterias? Oo

Se vc vai buscar um funcionário a partir de um Login vc deveria fazer o relaciomento do funcionário no login e não o contrário… aí para fazer a busca faria apenas:

Criteria criteria = session.createCriteria(LoginBean.class); criteria.add(Restrictions.eq("usuario", funcionario.getLogin().getUsuario())); criteria.add(Restrictions.eq("email", funcionario.getLogin().getEmail())); criteria.add(Restrictions.eq("funcionario.CPF", funcionario.getCPF()));

Detalhe que utilizei Restrictions ao invés de Expression… fiz isso pq sempre usei Restrictions e não sei dizer se expression funciona… porém… faz um teste :smiley: