基於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。

推薦閱讀: