`

org.hibernate.NonUniqueResultException: query did not return a unique result: 2

 
阅读更多

在进行拦截器配置的时候抛出了一个异常

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(),其作用就是保证数据返回值是唯一了,从而实现了对用户的唯一性

分享到:
评论

相关推荐

    JPA 开发中遇到的错误

    org.hibernate.PropertyValueException: not-null property references a null or transient value 当你尝试保存一个实体时,如果该实体中某个被标记为`@NotNull`或`@Column(nullable = false)`的属性值为null,则...

    javax.persistence.jar

    javax.persistence.NonUniqueResultException.class javax.persistence.NoResultException.class javax.persistence.OneToMany.class javax.persistence.OneToOne.class javax.persistence.OptimisticLockException....

    JPA和Hibernate的关系

    ### JPA和Hibernate的关系 #### 一、JPA概述 JPA(Java Persistence API)是Java平台上的标准ORM(Object Relational Mapping)接口,作为Java EE 5的一部分被引入,旨在提供一种统一的方式用于访问数据库。它定义...

    HibernateJPA

    Hibernate JPA,全称为Hibernate Java Persistence API,是Java开发中的一种流行持久层框架,主要用于简化数据库操作。在Java应用中,尤其是在企业级应用中,数据存储和检索是核心功能之一,而Hibernate JPA提供了...

    EJB3持久化规范中文版

    - `NonUniqueResultException`:当查询返回了多于一个的结果时抛出。 #### 三、查询语言 **3.1 概述** EJB3提供了Java Persistence Query Language (JPQL),一种用于查询实体数据的语言。 **3.2 语句类型** JPQL...

Global site tag (gtag.js) - Google Analytics