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?