@Modifying註解,否則報錯ORA-01002: 提取違反順序
在此記錄下jpa的知識點:
1.使用刪除、修改操作時需要在方法上多增加一個@Modifying註解,否則報錯ORA-01002: 提取違反順序
2.使用本地sql時,在@Query註解中需要增加nativeQuery = true
3.查詢中包含in 引數,可以直接傳一個List(Long) ids引數。此引數在本地測試了下,如果是傳入一個String陣列,沒有查到資料;把引數修改為List(String)後,可以查到資料。(程式碼在程式碼塊2中)
4.假如表結構的主鍵是聯合主鍵,那麼生成的jpa實體類會有兩個(包含一個實體類ID欄位為內嵌類,一個ID內嵌類);這個時候如果根據ID裡的欄位查詢,需要寫成這樣:findByIdParamCodeAndIdAppid,這裡的Id代表內嵌類的屬性名(猜的)
5.想要使用jpa查詢只返回List<單個欄位>,只能是返回一個List,然後再轉成自己想要的型別
6.jpa儲存主鍵不走序列:@SequenceGenerator(name = “SQ_BILAYOUT”, sequenceName = “SQ_BILAYOUT”, allocationSize = 1),加上allocationSize = 1屬性就走序列了
程式碼塊1:
/**
* 根據IDs刪除附件表
*
* @param id
*/
@Modifying
@Query(value = "delete from sys_attach where id in (:ids)", nativeQuery = true)
void deleteByIds(@Param("ids") List<Long> ids);
/**
* oracle樹查詢,根據所有父,查父本身及下邊的所有子
*
* @param ids
* @return
*/
@Query(value = "select id from sys_attach start with id in(:ids) connect by prior id=TAB_PARENT_ID", nativeQuery = true)
List<Object> findChildrenIdsByIds(@Param("ids") List<Long> ids);
程式碼塊2:
/**
* 系統引數dao
*
* @author zxl88
*
*/
public interface SysParamDao extends JpaRepository<SysParam, SysParamId> {
@Query(value = "select * from SYS_PARAM where PARAM_CODE=?1", nativeQuery = true)
public List<SysParam> getParamsByParamCode(String paramCode);
public SysParam findByIdParamCodeAndIdAppid(String paramCode, Long appid);
public SysParam findByIdParamCode(String paramCode);
@Query(value = "select * from SYS_PARAM where PARAM_CODE in(:paramCodes)", nativeQuery = true)
public List<SysParam> findByParamCodes(@Param(value = "paramCodes") List<String> paramCodes);
}
jpa儲存主鍵不走序列:@SequenceGenerator(name = “SQ_BILAYOUT”, sequenceName = “SQ_BILAYOUT”, allocationSize = 1),加上allocationSize = 1屬性就走序列了