JPA配置sqlserver数据源模式下出现:"***" 附近出现语法错误。

来源:互联网 发布:女士双肩休闲包 知乎 编辑:程序博客网 时间:2024/05/07 23:40


          由于最近要将JPA的数据源使用sqlserver。在成功配置完成之后,在service层调用底层的Dao层接口实现时候,出现错误:

         “10”附近出现语法错误。出错肯定是在sqlserver数据查询sql语句有问题,且是语法错误。


         解决思路:

                          A:由于JPA框架将底层Dao的数据库操作语句都封装了。在通常情况下是看不到sql语句的。所以,在基于JPA配置数据库文件中进行sql语句输出设置。

         我的是在jdbc.properties文件下,设置:  

    jpa.showSql=true    #设置JPA在底层执行数据库操作进行语句输出。
                         

                         B:然后就重新执行程序,在控制台将改sql语句提取出来,在sqlserver客户端中执行。结果依然是"10"附近有语法错误。所以,现在就需要观察该sql语句的语法。

        该sql语句如下:

   select erpinvento0_.CINVCODE as CINVCODE1_31_,    erpinvento0_.I_ID as I2_31_,    erpinvento0_.BACCESSARY as BACCESSA3_31_,     erpinvento0_.BATOMODEL as BATOMODE4_31_,    erpinvento0_.BBARCODE as BBARCODE6_31_,     erpinvento0_.BBILLUNITE as BBILLUNI7_31_,    erpinvento0_.BBOMMAIN as BBOMMAIN8_31_,    erpinvento0_.BFREE2 as BFREE41_31_,     erpinvento0_.BFREE3 as BFREE42_31_,     erpinvento0_.BFREE4 as BFREE43_31_,     erpinvento0_.BFREE5 as BFREE44_31_,     erpinvento0_.bFree5 10 as bFree45_31_, ........

                        观察该sql语句就会发现,在最后一行bFree5 10这里多了个空格,从而造成sql语句语法错误。


                       C:现在知道这里出现问题,那么该sql的BFree5 10 对应于JPA实体映射中的属性字段。那么就是实体在映射到JPA过程中出现问题。那么查看实体配置:

@Column(name = "BFREE5 10", precision = 22, scale = 0)public BigDecimal getBfree10() {return this.bfree10;}
                        看到了实体在column注解上的name属性配置中多了个空格,导致在映射到数据库中生成查询语句时候,就出现了A中的sql查询,在"10"附近出现了语句错误。

                       最后,就要重新设置该column名字字段信息,正确匹配。在Dao底层查询时候就可以正常查询。

         

0 0
原创粉丝点击