【问题标题】:Hibernate select query (Employee get by email id or get by name)Hibernate 选择查询(员工通过电子邮件 ID 获取或通过姓名获取)
【发布时间】:2018-07-31 20:19:47
【问题描述】:

在我的 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);
    }

但不工作.....

【问题讨论】:

    标签: java sql hibernate spring-mvc


    【解决方案1】:

    使用标准 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);
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用查询类来做到这一点:

      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);
      }
      

      【讨论】:

      • 我强烈反对使用 HQL 或任何纯文本字符串来查询数据库。这使您的代码难以管理、重构并且会增加维护成本。与存储过程类似的想法。请参阅下面的 Criteria 实现
      【解决方案3】:

      改用 HQL 查询

      from Employee e where e.email = :empEmail
      

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

      【讨论】:

        【解决方案4】:

        试试下面的代码:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-09-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多