spring data jpa中题禀,內(nèi)置了需要方便而實用的實現(xiàn),寫一個接口,繼承JpaRepository<T,ID> 。這樣你的這個接口就會有個實現(xiàn)類SimpleJpaRepository橙困。它內(nèi)置了很多方法,實現(xiàn)的接口:JpaRepository耕餐,JpaSpecificationExecutor凡傅,PagingAndSortingRepository,QueryByExampleExecutor蛾方,CrudRepository像捶。哎,功能之強(qiáng)大桩砰,不多說拓春,有時候在查詢指定條件的實體時,我們希望寫jpql來實現(xiàn)亚隅。例如:
@Query("select p from WalletPay p where id=:id")
WalletPay lockById(@Param("id") Long id);
枚舉作為where條件時硼莽,一樣的在參數(shù)中傳入接口。而有些時候煮纵,我們需要where中指定一些枚舉作為where條件懂鸵,這個時候的jqpl寫法有些變化。
/**
* 查詢可以做的task
* @param lastTime 最后修改時間
* @param now 當(dāng)前時間
* @return
*/
@Query("select t from NotifyTask t where " + "(t.state=cn.lowang.task.domain.enums.TaskState.NONE and nextTime<=?2) "
+ "or (t.state=cn.lowang.task.domain.enums.TaskState.FAIL and nextTime<=?2) "
+ "or (t.state=cn.lowang.task.domain.enums.TaskState.DOING and t.lastmodifiedTime<=?1)")
public List<NotifyTask> listValidTask(Date lastTime, Date now);
在jpql中行疏,我們需要指明枚舉的全路徑和枚舉值匆光。