java - JPA 中自定義對象和原生對象屬性名不一致怎么解決?
問題描述
有如下段代碼 其中person是jpa的entity對象,personResult是自定義對象
@Query(select new com.xx.yy.PersonResult(p.id,p.name,p.age) from Person p) List<PersonResult> findPersonResult();
這樣執(zhí)行是可以的,但是如果我其中的personResult對象中的id是叫personId,上面的代碼該如何改?
我用過
@Query(select new com.xx.yy.PersonResult(p.id as personId,p.name,p.age) from Person p) List<PersonResult> findPersonResult();
會報(bào)錯,是不是jpql new對象的時(shí)候不支持別名嗎?
問題解答
回答1:你的代碼
@Query(select new com.xx.yy.PersonResult(p.id as personId,p.name,p.age) from Person p) List<PersonResult> findPersonResult();
你把a(bǔ)s去掉就可以了,jpa是不支持這種語法的。
關(guān)于你的問題:Entity 和你自定義的類屬性名稱不一樣的問題,你大可不必?fù)?dān)心,使用select new xx.xx.PersonResult(p.id,p.name.p.age) 語法時(shí),jpa不會關(guān)心真實(shí)的字段叫什么名字,只要字段類型一致就可以了,因?yàn)檫@里采用是Java的構(gòu)造函數(shù)。調(diào)用構(gòu)造函數(shù)時(shí)只需要關(guān)心需要傳入幾個參數(shù)以及參數(shù)的類型
看下我代碼,這樣會直觀一點(diǎn)
@Query('select new com.zfxiao.pojo.AnnotherPerson(p.id,p.name,p.age) from Person p ')List<AnnotherPerson> findAnnotherPerson()
AnnotherPerson的構(gòu)造函數(shù)
public AnnotherPerson(Long personId, String name, Integer age) { this.personId = personId; this.name = name; this.age = age;}
相關(guān)文章:
1. 請教各位大佬,瀏覽器點(diǎn) 提交實(shí)例為什么沒有反應(yīng)2. docker images顯示的鏡像過多,狗眼被亮瞎了,怎么辦?3. javascript - 移動端textarea不能上下滑動,該怎么解決?4. javascript - Web微信聊天輸入框解決方案5. 網(wǎng)頁爬蟲 - 用Python3的requests庫模擬登陸B(tài)ilibili總是提示驗(yàn)證碼錯誤怎么辦?6. javascript - 微信小程序封裝定位問題(封裝異步并可能多次請求)7. css - 對于類選擇器使用的問題8. 大家好,請問在python腳本中怎么用virtualenv激活指定的環(huán)境?9. Matlab和Python編程相似嗎,有兩種都學(xué)過的人可以說說嗎10. javascript - 關(guān)于audio標(biāo)簽暫停的問題
