SpringData : xxx_xxx is not mapped
阿新 • • 發佈:2018-09-01
trac HERE 進行 mapped 最好的 實現 cep exception inter
今天寫一個查詢語句的時候,報錯如下
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘tag_ArticleRepository‘: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query method public abstract java.util.List com.fdzang.mblog.repository.Tag_ArticleRepository.getByTag_oId(java.lang.String)! No property tag foundfor type Tag_Article!
查詢Repository如下
package com.fdzang.mblog.repository; import com.fdzang.mblog.pojo.Tag_Article; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; public interface Tag_ArticleRepository extends JpaRepository<Tag_Article,String> { List<Tag_Article> getByTag_oId(String tag_oId); }
一開始想到的是肯定是下劃線會出問題,因為JPA對於命名規範比較嚴格,於是使用@Query註解進行測試
@Query("SELECT ta FROM tag_article ta WHERE ta.tag_oId = :tag_oId") List<Tag_Article> getByTag_oId(@Param("tag_oId") String tag_oId);
報錯如下
tag_article is not mapped
後來經過一番挫折,終於找到錯誤在哪兒了
@Query("SELECT ta FROM Tag_Article ta WHERE ta.tag_oId = :tag_oId") List<Tag_Article> getByTag_oId(@Param("tag_oId") String tag_oId);
在@Query註解中,應該是實體的名稱,而非數據庫的表名,區分大小寫
這個應該是Hibernate的底層實現原因,怪自己對Hibernate不熟悉而造成的
最後,總結一下:
以上是尚矽谷佟剛老師的SpringData教程,大致意思是在SpringDate的簡單查詢中,下劃線有著特定的意思
他的解析會優先於在類裏對比屬性
如本次的 getByTag_oId() 就會解析為Tag_Article.Tag.oId 而不是Tag_Article.Tag_oId
因為下劃線的優先級比較高,因此會先解析下劃線,而後在類裏進行比較
遇到這種問題的時候我們就可以基於註解開發了,畢竟SpringData的簡單查詢雖然簡單,但是因為死板,所以命名方面比較苛刻
當然,最好的就還是別用這該死的下劃線了!哈哈
SpringData : xxx_xxx is not mapped