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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章