javax.persistence.NoResultException:getSingleResult()没有检索任何实体

16 java ejb exception

我用ejb创建了一个namedquery来检查是否使用了用户名.当singleResult为null时,我得到以下异常:

javax.persistence.NoResultException: getSingleResult() did not retrieve any entities
Run Code Online (Sandbox Code Playgroud)

但是这个例外是我想要的用户名是免费的结果.

这是代码:

 public User getUserByUsername(String username) throws DAOException{
    try{
        Query q = em.createNamedQuery(User.getUserByUsername);
        q.setParameter("username", username);
        return (User) q.getSingleResult();
    }catch(Exception e){
        throwException(username, e);
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

有谁知道问题是什么.:(

我想返回null并且不会得到异常.

非常感谢你

ste*_*ase 33

您似乎使用该语句在catch块中重新抛出异常throwException(username, e);.如果您希望获得用户或null没有任何异常,则应如下所示:

public User getUserByUsernameOrNull(String username) {
    try{
        Query q = em.createNamedQuery(User.getUserByUsername);
        q.setParameter("username", username);
        return (User) q.getSingleResult();
    } catch(NoResultException e) {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)


ewe*_*nli 12

getResultList改为使用并检查它是否List为空(零元素).否则,列表包含一个元素,您只需返回它.