基於JPA查詢部分字段的相關事項
JPA查詢部分字段相關事項
JPA使用HQL查詢部分字段出錯
org.hibernate.hql.internal.ast.QuerySyntaxException: XXX is not mapped
解決
應該@Entity指定name名,name值為對應表名,同@Table的name值相同
使用HQL的註意
1.想要使用JPA查詢部分信息,需要使用HQL
2.select需跟實體,可以是map(必須是小寫,大寫試瞭下報錯),或者是將待查詢的字段單獨封裝成一個實體,new 實體
3.查詢的字段中需要指定as別名,否則得到的map結果集中,key值默認是”0″,“1”,“2”…數字
JPA中自定義查詢語句一定要註意這些
JPA的原生語句如何支持where a=X and b>x,未找到。
於是自定義,由於JPA底層是hibernate,所以需要HQL語句。
真尼瑪坑,sql語句為瞭所謂的面向對象,整個HQL語句,簡直就是典型的強行面向對象。
所以,你不得不如此:select u from Table u where u.x=x and u.y>y
每次寫這個最常忘記的是第二個u,完全反人類的語法。
而且JPA解析的時候,Table必須大寫開頭。
這個估計是先要JPA解析成HQL語句,再執行。
至於為啥要大寫開頭,可能是由於JPA的規定吧。
JPA會把TableEnt對應到table_ent這張表,為什麼寫成tableEnt就要報錯。太不人性化。
補充
CTM,JPA查詢語句中把元素開頭寫成瞭小寫。
findByStatusAndTimeMilliLessThan寫成瞭findByStatusAnd**t**imeMilliLessThan
這還是看到之前寫的附帶between的查詢才想起來
然between可以混著寫,那less和greater應該也行
也是被JPA的語法坑過幾次,才會對JPA這麼沒信心。
比如:findFirst必須寫成findFirstBy
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Springboot JPA如何使用distinct返回對象
- SpringDataJpa的@Query註解報錯的解決
- 解決Spring Data Jpa 實體類自動創建數據庫表失敗問題
- @TableName註解和@Table的區別及說明
- java中Hibernate的狀態總結