Querydsl update子句填充skips bean null值属性

evi*_*oco 3 java querydsl

当使用带有bean的null值属性的populate调用时,我遇到了SQLUpdateClause的问题.它只是从生成的更新SQL中跳过空值属性,而不是将相应的字段设置为NULL.

例:

public class Bean {

    private Long id;

    private String value;

    private String value2;

    ...
}

Bean bean = ...

bean.setValue(null);
bean.setValue("value2");

SQLUpdateClause update = new SQLUpdateClause(connection, dialect, qBean);

update.populate(bean).where(qBean.id.eq(...)).execute();
Run Code Online (Sandbox Code Playgroud)

会产生SQL:

update bean set value2 = 'value2' where bean.id = ...
Run Code Online (Sandbox Code Playgroud)

而不是期望:

update bean set value = null, value2 = 'value2' where bean.id = ...
Run Code Online (Sandbox Code Playgroud)

这里有什么帮助?... 请

evi*_*oco 7

当检查querydsl源代码时,找到解决方案:

...
update.populate(bean, DefaultMapper.WITH_NULL_BINDINGS)
      .where(qBean.id.eq(...))
      .execute();
...
Run Code Online (Sandbox Code Playgroud)

希望它可以帮助某人