JPA查询按id以外的参数查找

时间:2012-11-24 16:56:37

标签: java mysql database jpa dao

我有一个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;        
}

这给出了一个nullpointer-exception。我的猜测是,我的查询错了。任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

正如你所说,你可以这样做。但是如果你想要采用更接近的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();

希望它有所帮助!