QueryDSL:SQLUpdateClause 默认忽略空值背后的基本原理



我在使用 QueryDsl 更新具有空值的字段时遇到了问题。

例如,以下代码:

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 吗?

它使插入语句的生活变得非常容易。

处理更新时,只需检索原始记录,进行必要的更改,然后使用DefaultMapper.WITH_NULL_BINDINGS"更新"修改后的记录。

最新更新