JPA配置sqlserver數據源模式下出現:"***" 附近出現語法錯誤。


          由於最近要將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底層查詢時候就可以正常查詢。

         

發佈了33 篇原創文章 · 獲贊 88 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章