Opa
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