2012-09-10 33 views
3

当使用填充调用与bean的空值属性时,SQLUpdateClause有问题。它只是从生成的更新SQL中跳过空值属性,而不是将相应的字段设置为NULL。Querydsl更新子句填充跳过bean空值属性

例子:

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(); 

会产生SQL:

update bean set value2 = 'value2' where bean.id = ... 

相反的期望:

update bean set value = null, value2 = 'value2' where bean.id = ... 

任何帮助这里? ......请

回答

7

选中时querydsl源代码,找到了解决办法:

... 
update.populate(bean, DefaultMapper.WITH_NULL_BINDINGS) 
     .where(qBean.id.eq(...)) 
     .execute(); 
... 

希望它可以帮助别人