Java &引用;“未知列”;在AS400 db2上使用JPA

Java &引用;“未知列”;在AS400 db2上使用JPA,java,jpa,spring-data-jpa,Java,Jpa,Spring Data Jpa,我收到以下错误: 无法执行查询;SQL[选择DFBOGARM,求和(KVANTUM1) 作为KVANTUM1,(总和(DSTOMK)*1000/总和(KVANTUM1))作为DSTOMK, (总和(DSTAKK)*1000/总和(KVANTUMAKK))作为从 NHODATA.ERHDSTV1,其中DFSALVAR在(52,55)组中按DFBOGARM顺序按 DFBOGARM];嵌套异常是 org.hibernate.exception.sqlgrammareexception:无法执行查询 原

我收到以下错误:

无法执行查询;SQL[选择DFBOGARM,求和(KVANTUM1) 作为KVANTUM1,(总和(DSTOMK)*1000/总和(KVANTUM1))作为DSTOMK, (总和(DSTAKK)*1000/总和(KVANTUMAKK))作为从 NHODATA.ERHDSTV1,其中DFSALVAR在(52,55)组中按DFBOGARM顺序按 DFBOGARM];嵌套异常是 org.hibernate.exception.sqlgrammareexception:无法执行查询

原因:org.hibernate.exception.sqlgrammareexception:无法 执行查询

原因:com.ibm.as400.access.AS400JDBCSQLSyntaxErrorException:异常 检测到未定义的列名

查询实现:

public interface DistributionRepository extends JpaRepository<ERHDSTV1, Long> {

@Query(value="select  "
        + "    DFBOGARM, "
        + "    sum(KVANTUM1) as KVANTUM1, "
        + "    (sum(DSTOMK) * 1000 / sum(KVANTUM1)) as DSTOMK, "
        + " (sum(DSTAKK) * 1000 / sum(KVANTUMAKK)) as DSTAKK "
        + "from NHODATA.ERHDSTV1 "
        + "where DFSALVAR in(52, 55) "
        + "group by DFBOGARM "
        + "order by DFBOGARM", nativeQuery = true)
List<ERHDSTV1> findSummedValuesFor52and55();}

当从sql工具执行时,来自错误消息的查询将完美执行


标题是:DFBOGARM、KVANTUM1、DSTOMK、DSTAKK

好的,所以错误是我必须为上面的每一列选择值

这意味着我做了如下查询:

@Query(value = "select  "
        + "    DFBOGARM, 1 as DFSALVAR, 1 as DSTMND, 1 as DSTMNDAKK, 1 as KVANTUMAKK, "
        + "    sum(KVANTUM1) as KVANTUM1, "
        + "    (sum(DSTOMK) * 1000 / sum(KVANTUM1)) as DSTOMK, "
        + " (sum(DSTAKK) * 1000 / sum(KVANTUMAKK)) as DSTAKK "
        + "from NHODATA.ERHDSTV1 "
        + "where DFSALVAR in(52, 55) "
        + "group by DFBOGARM "
        + "order by DFBOGARM", nativeQuery = true)

这很有效。

您的DBMS是否希望您的列名用小写字母?消息是否指定了据称未定义的列名?你能让你的应用程序打印出实际生成的SQL吗?更新了,但是,不,没有提到具体的列,而且,不管是大写还是小写。似乎错误表明SQL查询是错误的,你是否尝试过直接对数据库运行它?“当从sql工具执行时,来自错误消息的查询执行得非常完美”我对列的大写名称也有类似的问题。这个答案有助于解决这个问题。
@Query(value = "select  "
        + "    DFBOGARM, 1 as DFSALVAR, 1 as DSTMND, 1 as DSTMNDAKK, 1 as KVANTUMAKK, "
        + "    sum(KVANTUM1) as KVANTUM1, "
        + "    (sum(DSTOMK) * 1000 / sum(KVANTUM1)) as DSTOMK, "
        + " (sum(DSTAKK) * 1000 / sum(KVANTUMAKK)) as DSTAKK "
        + "from NHODATA.ERHDSTV1 "
        + "where DFSALVAR in(52, 55) "
        + "group by DFBOGARM "
        + "order by DFBOGARM", nativeQuery = true)