jpa异常No entity found for query问题解决

 更新时间:2022年03月08日 10:46:25   作者:kl  
这篇文章主要为大家介绍了jpa异常之No entity found for query的异常问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步

jpa是什么?

JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

JPA 是 JCP 组织发布的 Java EE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构,提供相同的访问API,这保证了基于JPA开发的企业应用能够经过少量的修改就能够在不同的JPA框架下运行

JPA是需要Provider来实现其功能的,Hibernate就是JPA Provider中很强的一个,应该说无人能出其右。从功能上来说,JPA就是Hibernate功能的一个子集。Hibernate 从3.2开始,就开始兼容JPA。Hibernate3.2获得了Sun TCK的JPA(Java Persistence API) 兼容认证。

出现的问题

工作中使用了jpa来持久化数据,调试的时候抛了这样的异常No entity found for query,找不到查询的实体,导致这个问题主要是使用了getSingleResult()这个方法返回一个实体,下面我们看下源码找下原因

getSingleResult实现源码

@SuppressWarnings({ "unchecked", "RedundantCast" })
	public X getSingleResult() {
		try {
			final Listresult = query.list();

			if ( result.size() == 0 ) {
				NoResultException nre = new NoResultException( "No entity found for query" );
				getEntityManager().handlePersistenceException( nre );
				throw nre;
			}
			else if ( result.size() > 1 ) {
				final SetuniqueResult = new HashSet(result);
				if ( uniqueResult.size() > 1 ) {
					NonUniqueResultException nure = new NonUniqueResultException( "result returns more than one elements" );
					getEntityManager().handlePersistenceException( nure );
					throw nure;
				}
				else {
					return uniqueResult.iterator().next();
				}
			}
			else {
				return result.get( 0 );
			}
		}
		catch (QueryExecutionRequestException he) {
			throw new IllegalStateException(he);
		}
		catch( TypeMismatchException e ) {
			throw new IllegalArgumentException(e);
		}
		catch (HibernateException he) {
			throw getEntityManager().convert( he );
		}
	}

分析解决问题

从源码实现中的if判断我们可以看到,如果你使用了getSingleResult()来返回实体,结果为0或者大于1都会抛出异常。除非你能肯定你查询的实体存在且只有一个,不然一般返回实体还是建议使用getResultList()取结果集,然后做相关处理,如:

Listlist=entityManager().createQuery("SELECT o FROM User o where o.userId=?1", User.class)
        		.setParameter(1, userId)
        		.getResultList();
        if(list!=null && list.size()!=0){
        	return list.get(0);
        }
        return null ;

先判断结果集大小,根据结果集大小再确定是返回null还是取第一条

以上就是jpa异常No entity found for query问题解决的详细内容,更多关于jpa异常No entity found for query的资料请关注脚本之家其它相关文章!

相关文章

  • Intellij IDEA中一次性折叠所有Java代码的快捷键设置

    Intellij IDEA中一次性折叠所有Java代码的快捷键设置

    这篇文章主要介绍了Intellij IDEA中一次性折叠所有Java代码的快捷键设置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • SpringBoot拦截器原理解析及使用方法

    SpringBoot拦截器原理解析及使用方法

    这篇文章主要介绍了SpringBoot拦截器原理解析及使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 详解JAVA中priorityqueue的具体使用

    详解JAVA中priorityqueue的具体使用

    这篇文章主要介绍了详解JAVA中priorityqueue的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 解决springCache配置中踩的坑

    解决springCache配置中踩的坑

    这篇文章主要介绍了解决springCache配置中踩的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • springcloud配置ssh的问题及解决方法

    springcloud配置ssh的问题及解决方法

    这篇文章主要介绍了springcloud配置ssh,本文给大家介绍在配置过程中遇到的问题及解决方法,通过结合实例给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • 利用Java简单实现一个代码行数统计器方法实例

    利用Java简单实现一个代码行数统计器方法实例

    这篇文章主要给大家介绍了关于如何利用Java简单实现一个代码行数统计器的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Java Spring AOP详解

    Java Spring AOP详解

    这篇文章主要介绍了Java的Spring框架中的AOP实现实例,AOP面向切面编程其实也可以被看作是一个设计模式去规范项目的结构,需要的朋友可以参考下
    2021-09-09
  • 高内聚低耦合原则_动力节点Java学院整理

    高内聚低耦合原则_动力节点Java学院整理

    耦合度就是某模块(类)与其它模块(类)之间的关联、感知和依赖的程度,是衡量代码独立性的一个指标,也是软件工程设计及编码质量评价的一个标准
    2017-08-08
  • java实现ModbusCRC16校验的示例代码

    java实现ModbusCRC16校验的示例代码

    本文介绍了使用Java实现ModbusCRC16校验,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • 深入理解ThreadLocal工作原理及使用示例

    深入理解ThreadLocal工作原理及使用示例

    这篇文章主要介绍了深入理解ThreadLocal工作原理及使用示例,涉及ThreadLocal<T> 简介和使用示例及ThreadLocal<T>的原理等相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11

最新评论