2012-11-24 56 views
-1

我有一个MySQL数据库,其中包含一个名为User的表。它有两列。一个被命名为ID,另一个是EMAIL。它有更多的专栏,但与这个问题无关。JPA通过参数查找除了ID

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

这给出了一个空指针异常。我的猜测是,我的查询是错误的。任何人都可以帮我解决这个问题吗?

+0

'EntityManager'为空? – vels4j

+0

通常JPA查询将会像“select r FROM User r WHERE r.EMAIL =:email”,因为你不能像电子邮件中那样放入 – vels4j

+2

这是无效的JPQL(请检查规范中的“SELECT”部分)。很显然你可能会使用一些(Hibernate)实现,但如果你是这样的话,那么应该在任何问题中提及 – DataNucleus

回答

0

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

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

希望它有帮助!