jpql语句报错问题

第一次在软件公司里面上班,公司里面很多东西都封装了,因为没有API,很多时候需要慢慢去研究。今天就遇到一个JPQL修改的问题。

                System.out.println(jlMeterRunning.getAssetsNo()+" + "+jlMeterRunning.getFactorNum());
                String jpql = " update JlMeterSpec a set  mtMul = :factorNum"
                          + " where a.specCode = "
                          + "(select j.specCode from JlAssetsFile j where j.assetsNo = :assetsNo)";                
                QueryParamList params = new QueryParamList();
                System.out.println("=======================");
                System.out.println(jlMeterRunning.getFactorNum()+"after the jpql's倍率");
                System.out.println(jlMeterRunning.getAssetsNo()+"after the jpql's资产编号");
                params.addParam("factorNum", jlMeterRunning.getFactorNum());
                params.addParam("assetsNo", jlMeterRunning.getAssetsNo());
                System.out.println(jpql);
                JPAUtil.executeUpdate(jpql, params);

上面是正确的代码

由于之前比较少用jpql语句来进行update操作,在尝试编码之后发现想要更新的表名中的字段的数据并没有更新,起初控制台没有报错,在PL/SQL development中测试sql语句没问题之后再转换成为jpql语句。发现报错了。起初是以为页面没有传值过来,就用输出语句来进行数据的输出,发现可以获取到前端想要修改的数据的值,报错为table is not mapped,猜想是数据表没有映射到,于是在执行语句之前实例化了一下要操作的数据表的实体类,但是还是报错,但是可以基本上确定是jpql的语句问题。

光标对准操作的表名发现并没有显示跳转的路径,于是重新返回实体类文件,将类名完整的复制到jpql语句中对应的表名,发现问题解决。网上很多都是关于hibernate的配置文件中没有映射的原因,但也可能是在hql语句中操作的是实体类文件,而不是表名,而且区分大小写。

你可能感兴趣的:(2018年7月~9月笔记)