javax.persistence.NoResultException: No entity found for query

简介:

先看这个查询:

1
2
3
4
     public  FcLatestSumDeliver findByAccount(String account) {
         String jpql =  " select a from FcLatestSumDeliver a where a.account = :account" ;
         return  entityManager.createQuery(jpql, FcLatestSumDeliver. class ).setParameter( "account" , account).getSingleResult();
     }


当一个jpql语句查询为了返回条记录的时候,会用到getSingleResult()方法,但是如果查询结果集大小为0,则会抛出异常。

javax.persistence.NoResultException: No entity found for query



因此,这个方法很鸡肋,通常我们期望在结果集为0的时候返回一个null,这个更符合常理。否则取第一条。


为了处理此问题,通常写法如下:

1
2
3
4
5
6
7
8
9
     public  FcLatestSumSupplier findByAccount(String account) {
         String jpql =  " select a from FcLatestSumSupplier a where a.account = :account" ;
         List<FcLatestSumSupplier> rs = entityManager.createQuery(jpql, FcLatestSumSupplier. class ).setParameter( "account" , account).getResultList();
         if  (rs.size() >  0 ) {
             return  rs.get( 0 );
         else  {
             return  null ;
         }
     }


先判断结果集大小,根据结果集大小再确定是返回null还是取第一条,这样显然更合理,不知道getSingleResult()方法的实现怎么会这样。



本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/1554587,如需转载请自行联系原作者

相关文章
|
6月前
|
Java 数据库连接
错误org.hibernate.AnnotationException: No identifier specified for entity
请根据你的实际情况,将实体类中的字段和注解进行适当的调整,以确保每个实体类都有一个明确定义的标识符(主键)。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
76 0
|
6月前
|
Java
org.springframework.web.util.NestedServletException: Request processing failed; nested exception....
org.springframework.web.util.NestedServletException: Request processing failed; nested exception....
156 0
org.apache.ibatis.builder.BuilderException: An invalid property ‘jdbcType ‘ was found in mapping
org.apache.ibatis.builder.BuilderException: An invalid property ‘jdbcType ‘ was found in mapping
101 0
|
Java Android开发
Unable to load class ‘javax.xml.bind.annotation.XmlSchema‘.
Unable to load class ‘javax.xml.bind.annotation.XmlSchema‘.
891 0
Unable to load class ‘javax.xml.bind.annotation.XmlSchema‘.
|
Java 数据库连接
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update at org.hi
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update at org.hi
154 0
|
Web App开发 Java 数据库连接
javax.validation.ValidationException: Unable to create a Configuration
错误信息: [org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean]-Failed to set up a Bean Validation provider javax.
3649 0
|
关系型数据库 MySQL Java
org.hibernate.exception.JDBCConnectionException: could not execute query
最近的一个项目在Hibernate使用C3P0的连接池,数据库为Mysql。开发测试没有问题,在运行中每个一段长的空闲时间就出现异常:
558 0
|
Java 数据库连接
【hibernate】错误:org.hibernate.HibernateException: identifier of an instance of com.agen.entity.Monthdetail was altered from xx to xx
所报错误: org.hibernate.HibernateException: identifier of an instance of com.agen.entity.Monthdetail was altered from 40288f8e5ac675fe015ac67725c40001 to ...
1827 0
问题:org.hibernate.LazyInitializationException: failed to lazily initialize
今天搞了一上午,都在解决这个问题:org.hibernate.LazyInitializationException: failed to lazily initialize 原因很简单,是在非法的session中去调用lazy=“true“的属性, 网上资料蛮多的,解决方法有两个 1,把lazy=”false“ 2,在web.
903 0