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

时间:2017-06-14 12:33:34

标签: java querydsl

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

以下代码为例:

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

默默地忽略“text”字段的更新。

挖掘代码我找到了一种正确设置空值的方法:

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

这导致了几个问题:

  • 无提示错误:忘记更新映射器可能导致以后很难找到错误,因为更新不会引发异常。
  • API复制:需要在现有的updateEntity API中添加“updateNulls”标志,以保持兼容性。

默认情况下决定忽略更新空值的理由是什么? 抛出异常会破坏现有的API吗?

1 个答案:

答案 0 :(得分:0)

它使插入语句的生活变得非常简单。

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