一尘不染

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

hibernate

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

我知道,对于我编写的查询,可能仅存在一行或根本不存在。因此,没有理由让我使用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中。但是我相信会有更好的方法。


阅读 360

收藏
2020-06-20

共1个答案

一尘不染

是。您需要使用代码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..
}
2020-06-20