jpa自定義字段


自定義返回的字段,不知道為啥select new 總是報錯,無論是select new Map 還是select new 實體,所以先暫時用下邊這個不規范的方法,等我找出原因了會更新

 自定義實體,繼上邊那個問題后發現自定義實體的話可以實現,首先要加@Entity注解和@Id注解

實體,省略setter和getter

 

 sql:

 

 這里用了一個工具類,封裝的就是entitymanager的方法:

 

 測試:

 解決辦法二:不知道百度上那些select new是怎么操作的,反正我操作結果集總是不對,但是還是找到了另一種解決方法:

在dao層中的代碼,這里的query注解執行sql代碼返回的是一個list,也就是這個:List<Object[]> list  = entityManager.createNativeQuery(sql).getResultList();

里邊的元素是object[]數組,這里相當於強轉一下由Object[]轉化為Map<String,Object>

 建議的話還是用對象來接受,因為對象接收的話就相當於mybatis的resultMap,如果元素為空的話是會顯示的,但是用map接受的話空元素就不會顯示。

測試:

 解決辦法三:終於找到了select new 的辦法:

首先還是建自定義實體類Test,注意參數類型必須和原類的參數類型相同,且構造方法內的參數順序和查詢的順序一致,相應的注解也要加:

 

 然后在responsitory中,new Test內的參數與構造方法中的順序一致,這是hql的寫法所以nativeQuery=true這個啟用sql語句的參數就不需要了,賦值的話在這里用:id,@Param這個注解也不能少,from表的時候要找對應的實體類而不是數據庫中的表名。

 

解決辦法四:不用另外創建實體類,返回List<Map<String,Object>>的數據:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM