jqa的query使用原生sql查詢(nativequery = true)
的時候不支援排序的,需要在sql裡面加上:order by ?#
spring data jpa本地查詢(帶分頁方式)
@query(value = "select u.* from
user u inner
join project_user pu " +
"on pu.project_id=?1
and pu.user_id=u.user_id order
by ?#",
countquery = "
select
count(*) from
user u inner
join project_user pu " +
"on pu.project_id=?1
and pu.user_id=u.user_id",
nativequery = true)
pagefindbyprojectid(string projectid, pageable pageable);
注意:
countquery中不要寫成:
「select count(u.*) from user u inner join project_user pu on pu.project_id=?1 and pu.user_id=u.user_id」
count(u.*)
會報錯,應該寫為count(*)
order by ?#用於 pageable. countquery 用於page<>。
dmitry stolbov回答
如果不寫countquery,那麼jpa會預設在select的引數上加count,例如上面例子就會成為 select (u.*) …jparepository中的介面方法返回型別只能是這樣就會報錯。所以應該寫出自定義的countquery
實體類
或者object(值作為字串列表返回,沒有key)
,如果這時想要通過跨表連線查詢,返回乙個非實體類的dto,就會報錯。
利用hql可以輕鬆解決。例如:
@query(
value = "select new com.test.dto.getprojectuserdto(u.userid, u.name, u.displayname, r.name, pu.description) from
user u, projectuser pu, role r " +
"where pu.projectid=?1
and pu.userid=u.userid and pu.roleid=r.id",
countquery = "
select
count(*) from
user u, projectuser pu, role r " +
"where pu.projectid=?1
and pu.userid=u.userid and pu.roleid=r.id")
pagefindbyprojectid(string projectid, pageable pageable);
注意: 關於Spring Data Jpa 動態查詢
通常來說 的後台管理系統對於資料的查詢需要提供多種查詢條件,並且要求在使用者任意的選擇條件進行查詢 這種情況下後端需要通過不同的條件組合對資料庫進行查詢,mybatis的標籤能夠很好地實現這個功能 只需要在if標籤中對引數進行判空,非空則拼接where 條件即可。但是對於spring data jp...
spring data jpa實體繼承
spring jpa中我們要將sql對映到物件,尤其是在spring boot這種高度自動化的環境下使用,大量的最優目錄結構與命名規則可以大大降低配置,約定大於配置貫穿其中。例如我們定義查詢dao,繼承jparepository即可。然後返回的物件,我們可以定義model entity table ...
SpringData JPA分頁查詢
首先我們需要知道springdata jpa 的幾個介面 其實看名字就大概懂了,也可以很方便的使用 首先我們的持久化層繼承jparepository,相當於繼承了增刪改查的持久化層以及分頁查詢的持久化層 所以如果我們要使用分頁查詢 我們只需要直接呼叫 由一開始的圖也可以看到pageable的其中乙個...