若是數據庫表的字段名稱帶有下劃線,使用IDEA映射爲實體後:java
1 @Entity 2 @Table(name = "user_profile") 3 public class UserProfile { 4 @Id 5 @GeneratedValue(strategy = GenerationType.IDENTITY) 6 private Long User_ID; 7 private String User_Name; 8 private String Real_Name; 9 10 public UserProfile() { } 11 12 getter... 13 setter... 14 }
Spring Data JPA查詢時如: 數據庫
1 findByUser_ID();
會報錯,時由於有下劃線,Spring Data的解析規則爲:框架
查詢方法以find|read|get開頭(好比 find、findBy、read、readBy、get、getBy),涉及條件查詢時,條件的屬性用條件關鍵字鏈接,要注意的是:條件屬性首字母需大寫。框架在進行方法名解析時,會先把方法名多餘的前綴截取掉,而後對剩下部分進行解析。 spa
好比 findByUserAddressZip()。框架在解析該方法時,首先剔除 findBy,而後對剩下的屬性進行解析,詳細規則以下(此處假設該方法針對的域對象爲 AccountInfo 類型):
先判斷 userAddressZip (根據 POJO 規範,首字母變爲小寫,下同)是否爲 AccountInfo 的一個屬性,若是是,則表示根據該屬性進行查詢;若是沒有該屬性,繼續第二步;
從右往左截取第一個大寫字母開頭的字符串(此處爲 Zip),而後檢查剩下的字符串是否爲 AccountInfo 的一個屬性,若是是,則表示根據該屬性進行查詢;若是沒有該屬性,則重複第二步,繼續從右往左截取;最後假設 user 爲 AccountInfo 的一個屬性;
接着處理剩下部分( AddressZip ),先判斷 user 所對應的類型是否有 addressZip 屬性,若是有,則表示該方法最終是根據 "AccountInfo.user.addressZip" 的取值進行查詢;不然繼續按照步驟 2 的規則從右往左截取,最終表示根據 "AccountInfo.user.address.zip" 的值進行查詢。
可能會存在一種特殊狀況,好比 AccountInfo 包含一個 user 的屬性,也有一個 userAddress 屬性,此時會存在混淆。讀者能夠明確在屬性之間加上 "_" 以顯式表達意圖,好比 "findByUser_AddressZip()" 或者 "findByUserAddress_Zip()"。code
可是如今的屬性中沒有相似上述 「AccountInfo 包含一個 user 的屬性,也有一個 userAddress 屬性」,因此查詢會出錯對象
能夠在要用的屬性前加上blog
@Column(name = "列名")
而後把實體改成ip
1 @Entity 2 @Table(name = "eb_user_profile") 3 public class UserProfile { 4 @Id 5 @GeneratedValue(strategy = GenerationType.IDENTITY) 6 @Column(name = "UserID") 7 private Long User_ID; 8 @Column(name = "UserName") 9 private String User_Name; 10 @Column(name = "RealName") 11 private String Real_Name; 12 13 public UserProfile() { } 14 15 getter... 16 setter... 17 }
這時查詢語句就改成:字符串
1 findByUserID();
這樣就解決了這個錯誤get