在发布此问题之前,我已经看过了,但是找不到所需的内容。
我知道,对于我编写的查询,可能仅存在一行或根本不存在。因此,没有理由让我使用getResultList()。
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如果没有结果,它将抛出该异常,这取决于您如何处理它。
try/catch
Exception
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.. }