2019-10-30 15:04

@JFinal 额,我不是这个需求… 麻烦看一下,新鲜出炉的栗子:

——这是数据表结构——

CREATE TABLE `test_table` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`a` bigint(11) NOT NULL DEFAULT '0',
`b` bigint(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


——这是测试用代码——

TestTable model = new TestTable();

model.setA((long) 1); // set a ,不 set b

model.removeNullValueAttrs(); // 这些 solution 解决不了问题
model.remove("b"); //
model.keep("id", "a"); //

model.save(); // save 成功后,数据库里的 a 为 1, b 为 0

System.out.println(model.getA()); // 输出 1
System.out.println(model.getB()); // 输出 null (问题所在,即使采用上述三种方法都不行)

model = model.findById(model.getId()); // 解决方案:重新取一次该 model (用dao也可以)

System.out.println(model.getA()); // 输出 1
System.out.println(model.getB()); // 输出 0


————

所以,我的需求是,有没有比 “重新取一次” 更好的方法,使 model.getB() 得出 0 而非 null _(:з」∠)_

2019-10-30 11:38

@JFinal 数据库表那边的字段都已经设置好了默认值了啊,但问题不是save()后直接裸调用原model的get方法,对这些字段取出来的仍然是null么

(还是我哪个地方理解错了?。)

2019-10-30 11:19

@JFinal 谢谢!
不过我目前的情况是
比如一条当日统计数据,可能只有两三个三五个字段有设定值,剩下一二十个字段都是(在数据库里)默认0
如果这么做的话,不可避免要写很长的重复性代码?

真的没有什么除了 “再取一次” 外的 简洁实现方法了麽 QAQ

2019-10-30 10:25

@zeroabc 我也遇到了类似问题,就是:

· new了一个model
· set了必要的字段
· save()
· 想让剩下的字段按照database里的默认值(0之类)自动设好
· get那些字段,结果取出来的是null,影响后续业务

应该是这个意思吧?
目前只能save()之后,再重新从数据库里取一下

@JFinal 有其他解决方案吗?