【问题标题】:JPA Query find by parameter other than idJPA Query 通过 id 以外的参数查找
【发布时间】:2012-11-12 15:51:12
【问题描述】:

我有一个 MySQL 数据库,其中包含一个名为 User 的表。它有两列。一个名为ID,另一个名为EMAIL。它有更多的列,但这与问题无关。

在我的 DAO 对象中,我想创建一个名为 findByEmail 的方法。目前看起来是这样的:

@Override
public User findByEmail(String email) {
    Object obj = em.createQuery("FROM User WHERE EMAIL LIKE :email").setParameter("email", email).getSingleResult();
    User user = (User)obj;
    return user;        
}

这给出了一个空指针异常。我的猜测是,我的查询是错误的。谁能帮我解决这个问题?

【问题讨论】:

  • 通常 JPA 查询会像“select r FROM User r WHERE r.EMAIL = :email”,因为您不能在电子邮件中输入类似
  • 这是无效的 JPQL(检查“SELECT”部分的规范)。显然,您可能正在使用一些(Hibernate)特定于实现的,但是如果您是,那么在任何问题中都应该提到这一点

标签: java mysql database jpa dao


【解决方案1】:

显然,MySQL 服务器被配置为阻止所有远程连接。它现在可以工作了(使用 vels4j 提供的 JPA 查询,select r FROM User r WHERE r.EMAIL = :email

【讨论】:

    【解决方案2】:

    正如你所说,你可以这样做。但是如果你想遵循更接近的 SQL 方法,你不妨使用

        @Override
    public User findByEmail(String email) {
        Object obj = em.createNativeQuery("SELECT * FROM User WHERE EMAIL = " + email).getSingleResult();
        User user = (User)obj;
        return user;        
    }
    

    此外,如果您想缩短代码,您可以在执行查询的同一行中声明和强制转换用户,如下所示:

    User user = (User) em.createNativeQuery("SELECT * FROM User WHERE EMAIL = " + email).getSingleResult();
    

    希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-15
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 2013-10-12
      • 2019-05-29
      • 1970-01-01
      相关资源
      最近更新 更多