JPA Query 通过 id 以外的参数查找
Posted
技术标签:
【中文标题】JPA Query 通过 id 以外的参数查找【英文标题】:JPA Query find by parameter other than 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)特定于实现的,但是如果您是,那么在任何问题中都应该提到这一点 【参考方案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();
希望对您有所帮助!
【讨论】:
以上是关于JPA Query 通过 id 以外的参数查找的主要内容,如果未能解决你的问题,请参考以下文章