2017-06-14 106 views
0

我在使用QueryDsl更新具有空值的字段時遇到了問題。QueryDSL:默認情況下,SQLUpdateClause背後的理由忽略空值

例如下面的代碼:

entity.setText(null); 
new SQLUpdateClause(connection, templates, QEntity) 
    .where(...) 
    .populate(entity) 
    .execute(); 

自動忽略對「文本」字段更新。

在我想出一個辦法代碼挖正確設置空值與:

entity.setText(null); 
new SQLUpdateClause(connection, templates, QEntity) 
    .where(...) 
    .populate(entity, DefaultMapper.WITH_NULL_BINDINGS) 
    .execute(); 

這導致了幾個問題:

  • 無聲的錯誤:忘記更新映射器會導致錯誤很難在以後找到,因爲更新不會引發異常。
  • API複製:爲了保持兼容性,需要向現有updateEntity API添加「updateNulls」標誌。

默認情況下忽略更新空值的決定背後的基本原理是什麼? 會拋出異常打破現有的API?

回答

0

它使插入語句的生活變得非常簡單。

處理更新時,只需檢索原始記錄,進行必要的更改,然後使用DefaultMapper.WITH_NULL_BINDINGS'上插'修改的記錄。