1. 程式人生 > 其它 >@Modifying註解,否則報錯ORA-01002: 提取違反順序

@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屬性就走序列了