org.hibernate.NonUniqueResultException: query did not return a unique result: 2
程序员文章站
2022-04-15 23:01:36
...
在进行拦截器配置的时候抛出了一个异常
org.hibernate.NonUniqueResultException: query did not return a unique result: 2
在项目中出现了org.hibernate.NonUniqueResultException: query did not return a unique result: n的情况一般是由于session.createSQLQuery(sql.toString()).uniqueResult()代码导致的。当查询的数据条数大于1的时候使用uniqueResult()方法就会出现上述异常,所以解决办法就迎刃而解了。
第一、将字段限制唯一
第二、如果这个查询有可能出现多条数据的时候就不要调用此方法
第三、try{}catch{}捕获进行相应的异常处理。
经过细致的检查以后发现,原来是数据库中有了两个admin用户,导致到数据库中去查找的时候找到了两个结果
而我又在UserServiceImpl.java中有以下的内容
package com.jxust.oa.service.impl;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.jxust.oa.base.BaseDaoImpl;
import com.jxust.oa.domain.User;
import com.jxust.oa.service.UserService;
@Service
public class UserServiceImpl extends BaseDaoImpl<User> implements UserService {
public User getByIdLoginNameAndPassword(String loginName, String password) {
return (User) getSession().createQuery(//
"FROM User u WHERE u.loginName=? AND u.password=?")//
.setParameter(0, loginName)//
.setParameter(1, DigestUtils.md5Hex(password))//要使用MD5的摘要
.uniqueResult();
}
}
在createQuery中加入了uniqueResult(),其作用就是保证数据返回值是唯一了,从而实现了对用户的唯一性