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?