Spring data JPA 報錯JPA-style positional param was not an integral ordinal

 

Spring boot  整合Spring data neo4j時,在持久化接口的時候,拋出異常,原來是使用的sql語句後的";"的問題.

或者直接添加空格.. 

 

 

該sql就會拋出上面的錯誤,原因就是sql使用時,?1和後面的分後連接在了一起,沒有起具體的作用.

直接把sql後面的分號拿掉就不會有問題了;

 

 

TIPS:

 

此時使用的是mysql數據庫

業務需求,查詢出當天生日的客戶的信息;

 

此時,以前的想法是查詢出所有的數據,然後比對當天的生日的客戶.然後取出來想用的數據;

其實mysql還有一個DAY()和MONTH()函數

select * from customer where MONTH(birthday) = MONTH(NOW()) and DAY(birthday) = DAY(NOW())

 

查詢客戶中的月份等於今天對應的月份 AND 天數和今天是相等的情況.即是月份和日期相等,即客戶是今天的生日;

 

還有一個業務是查詢,客戶的三天後是還款日的客戶信息;

這樣一想,好像只要看day的情況就可以了...

 

但是這裏有一個情況是,三天後是還款日,即可能是本月,也可能是次月(即1號還款日和31號還款日)是不同....

 

所以,噹噹天日數和三天後的日期進行比較.如果是小於三天後的日期,則是本月;否則是次月;比較繞...哈哈哈

 

    public void getDayBefor() {
        long currentTimeMillis = System.currentTimeMillis();
        long period = (long) (days * 86400000);
        Date d = new Date(period + currentTimeMillis);
        Calendar calendar = Calendar.getInstance();
        int now = calendar.get(Calendar.DAY_OF_MONTH);
        calendar.setTime(d);
        day = calendar.get(Calendar.DAY_OF_MONTH);
        if (now > day){
            next = "次";
        }else {
            next = "本";
        }
        logger.debug(days + "天后的日期是:" + day+"日,選擇月份是:"+next);
    }

 

這樣的話,先獲得本月的第幾天(即日數),再看三天後的日期,這裏使用了long值進行換算,相對偷了個懶,其實用calendar也可以..

然後比較當前的日數和三天後的日數的大小,判斷是本月還是次月;

 

當然這個days不會大於28,因爲如果遇到2月份這種情況,就跨月了....

業務也不允許提前28天提醒還款信息.

 

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