play項目實戰-如何進行upsert操作

本文爲作者原創,轉載請標明出處。原作者:Tony_老七
項目中有進行upsert的需求,查看了現有Model是沒有的

解決辦法想了兩種:
1.使用現有Model的delete然後再save()
2.使用原生sql執行upsert操作

因爲剛接觸Play不久,所以想都試一下,果然收穫還是挺多的。

方案一:
先調用delete方法,可以傳入key
    public static void deleteByActName(String actName){
        ActTargetConfig.delete("act_name=?", actName);
    }
然後再執行save方法。
有一點需要注意的是:delete方法請不要寫在繼承Controller的該類中,否則會發生跳轉的。

方案二:
String sql="xx";
Query query = Model.em().createNativeQuery(sql);
query.setParameter(xx,xx);
query.executeUpdate();

有兩點需要注意,
1.在sql中不要把佔位符放到''之間,如name='?',這種方式檢測不到佔位符的,
會報如下錯誤:
Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based! Position: 2
2.佔位符index從1開始


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