当前位置: 首页 > 面试题库 >

javax.persistence.NoResultException:找不到要查询的实体

刁丰羽
2023-03-14
问题内容

在发布此问题之前,我已经看过了,但是找不到所需的内容。

我知道,对于我编写的查询,可能仅存在一行或根本不存在。因此,没有理由让我使用getResultList()

这是我的代码

String hql="from DrawUnusedBalance where unusedBalanceDate= :today";
Query query=em.createQuery(hql);
query.setParameter("today",new LocalDate());

DrawUnusedBalance drawUnusedBalance= 
    (DrawUnusedBalance)query.getSingleResult();// we can have only a
                                               // single datum per day
//`System.out.println(drawUnusedBalance.toString());`

问题是,如果没有行,它将引发异常,否则,它将运行正常。我知道问题所在,但我也在寻找最佳解决方案。

我想要的是,如果数据库中没有行,我想获取一个空对象(而不是获取异常),因此我将插入一个新数据,如果不为空,我只想更新它。

有一种处理方法,我认为这不是正确的方法。它是:我将有一个try-
catch块,如果抛出异常,我可以编写将新数据插入到catch块上的DB中。但是我相信会有更好的方法。


问题答案:

是。您需要使用代码try/catch块,但无需捕获Exception根据
API
NoResultException如果没有结果,它将抛出该异常,这取决于您如何处理它。

DrawUnusedBalance drawUnusedBalance = null;
try{
drawUnusedBalance = (DrawUnusedBalance)query.getSingleResult()
catch (NoResultException nre){
//Ignore this because as per your logic this is ok!
}

if(drawUnusedBalance == null){
 //Do your logic..
}


 类似资料:
  • 问题内容: 我正在执行以下几行: 奇怪的情况。如果我仅使用一个实例执行它,则效果很好,但是如果我与多个实例并行执行(一个mdb的实例),则第一个实例将被执行而没有任何异常,其余所有实例都会收到此错误: 知道会导致什么吗?以及它是如何第一次工作的,但是对于所有其他实例却没有? 谢谢, 射线。 问题答案: 该错误消息通常告诉您查询没有返回结果。如此失败。 如果期望空查询结果,请考虑使用并测试结果:

  • TestValue类是简单的pojo 这只是本地env,所有的东西都在我的机器上运行,单个Hazelcast实例。我的代码与官方文档中的示例相匹配。 Hazelcast版本:4.2.1

  • 问题内容: 考虑这种情况… 我有1000美元,我想购买上面列出的东西。 我想花全部钱 因此,我需要一个查询,该查询将给出所有产品中多少单位的价格为1000 $ 有什么帮助吗? 问题答案: 这是硬编码的,几乎没有灵活性。我的系统花了2分钟才能运行。但是可能会有所帮助,如果没有,抱歉。fnGenerate_Numbers是一个表函数,它返回参数范围内的整数。 做到这一点的方法。

  • 问题内容: 我正在使用JPA和Hibernate和Postgresql开发应用程序。使用Netbeans向导,我从现有数据库中创建了实体类。这些类之一的摘录如下: 在EJB中,我有: 当我尝试执行时,会产生以下错误: 我知道Postgres对于大写的表名有点烦人,但是如何更改查询以指向“ ADM_TYPES”而不是AdmTypes?这不是应该自动完成吗(毕竟我是从现有数据库中创建实体类的)?代码有

  • 问题内容: 我正在使用 spring / hibernate / mysql ,目前在 spring-hibernate.xml中 使用以下设置 我经常看到 “ select @@ session.tx_read_only” 和 “ select @@ session.tx_isolation” 查询主要在选择实际数据的语句之后发送到数据库。 这些查询中的每一个都会增加20-25毫秒的时间,而在O

  • 我怀疑我的SQL。 请找到查询 输出显示properly.currently我得到firstname和lastname。但对于某些条目,名和姓为空。我需要修改查询,以便我可以打印列的非空值if(last_id!=0和date(活动)=date(start_date),CONCAT(ag.firstname ,' ‘, ag.lastname ) ,’') 相同的查询,不包括名和姓的空条目。我尝试了