2019-10-30 19:31
@Westwood 我明白你的需求了,你是希望 save() 在往数据库插入一条数据以后,可以立即使用 model.getXxx() 来获取使用默认值生成的字段值
jfinal 目前只能满足这种需求的自增主键的获取,无法满足你在例子中的字段 b 的获取
自增主键的获取可以这样:
model.save();
model.getId();
也就是说自增主键在 save() 方法调用以后是自动从数据库获取到的
2019-10-30 13:26
@Westwood 可能你将 jfinal 的 model.save() 当成是 hibernate 去理解了
save() 方法只会去保存 set 过的值,其它的值不会改变它
如果你的代码由于某种原因调用了 model 的相关 set 方法,可以用下面两个方法来解决:
1:model.removeNullValueAttrs();
model.save();
remove 方法会去除 model 内的 null 值字段,然后你再 save() 就不会覆盖掉数据库的默认值了
2:model.remove(fiel1, fiel2, field3, ...);
model.save();
remove 方法会去除 model 内指定的字段,可同时指定多个,然后 save()
3:model.keep(fiel1, fiel2, field3, ...);
model.save()
如果要去除的字段很多,反而是需要保留的很少,可以使用 keep 方法指定要保留的字段值
jfinal 数据库操作早已解决了这方面问题
2019-10-30 11:03
@Westwood 在最终的 model 中,覆盖父类的 save() 方法,判断默认值是不是有,没有的话,设置一个,例如:
public MyModel extends Model {
public boolean save() {
if (get(xxx) == null) {
set(xxx, defaultXxx);
}
if (get(yyy) == null) {
set(yyy, defaultYyy);
}
return super.save();
}
}
当然如果希望更完美,可以先定义一些默认值的常量,例如:
public MyModel extends Model {
public static int STATUS_FAIL = 0;
public static int STATUS_OK = 1;
public boolean save() {
if (get("status") == null) {
set("status", STATUS_OK);
}
return super.save();
}
}
2019-10-29 15:04
@farce stop() 以后, DbKit.getConfig(configName) 是获取不到被释放的那个 config 对象的
你通过 arp.getConfig().getName() 获取到的只是从 DbKit 中移除的,但并不在系统内产生作用的对象
2019-10-29 13:22
@farce arp.stop()以后应该会被回收的,建议在 start() 、stop() 方法中设置断点,单步调试看看到底是什么原因出现的 Config already exists