Hibernate选择查询(员工通过电子邮件ID获取或按名称获取)

时间:2018-02-21 09:48:39

标签: java sql hibernate spring-mvc

在我的Spring Hibernate项目中,我需要单个员工对象,电子邮件地址不是id,来自我的员工表。

 public Employee getEmployeeById(long employeeId) {
        return (Employee) sessionFactory.getCurrentSession().get(
        Employee.class, employeeId);
    }

不是这一个......!

我需要这样:

 public Employee getEmployeeByEmail(String empEmail) {
        return (Employee) sessionFactory.getCurrentSession().get(
        Employee.class, empEmail);
    }

但是没有工作......

4 个答案:

答案 0 :(得分:1)

使用Criteria API:

public Employee getEmployeeByEmail(String empEmail) {
  Criteria crit = sessionFactory.getCurrentSession().createCriteria(Employee.class);
  crit.add(Restrictions.eq("email", empEmail)); //assuming Employee entity has "email" field
  return (Employee) crit.list().get(0);
}

答案 1 :(得分:0)

使用HQL查询

from Employee e where e.email = :empEmail

带有两个参数的Hibernate Session#get()需要具有Serializable id 类型的第二个参数,而不是任何其他Entity字段。

答案 2 :(得分:0)

您可以使用Query类来执行此操作:

public Employee getEmployeeByEmail(String empEmail) {
  Query query = sessionFactory.getCurrentSession().createQuery("from Employee where email = :email");
  query.setParameter("email", empEmail);
  return (Employee) query.list().get(0);
}

答案 3 :(得分:0)

尝试使用以下代码:

public Employee getEmployeeByEmail(String empEmail) {
       Employee e = (Employee)
       sessionFactory.getCurrentSession().createCriteria(Employee.class);
       crit.add(Restrictions.eq("email", empEmail)).uniqueResult();
       return e;
    }