怎么获得Model所修改的字段名

Rajab 发布于 2013/12/08 22:31
阅读 507
收藏 0

@JFinal 你好,想跟你请教个问题:

 怎么获得Model所修改的字段名?现在想在更新前,判断如果某个字段被修改,则在更新后执行一个特定的操作。我看了Model类中有个叫modifyFlag的set保存着修改的字段名,可是getModifyFlag方法是私有的,这可怎么办?得不到啊


我又不想改源码,主要是新版加了好多依赖,一时半会儿找不齐那个库。所以现在就是笨办法,在更新前再查一次库,与查出来的和待更新的对象进行该字段的比较,不舒服。


加载中
1
JFinal
JFinal
写个工具方法,用 java 反射调用 getModifyFlag 得到 Set 对象
0
Rajab
Rajab

引用来自“JFinal”的答案

写个工具方法,用 java 反射调用 getModifyFlag 得到 Set 对象
@JFinal 对。可以。可是我又发现一个问题,在Controller中通过getModel(XXX.class)获得的对象,都已经调用了set方法将各属性注入到对象中,而在调用set方法的时候,实际上就把modifyFlag添加了,这样,我即便得到modifyFlag集合,实际上也是无法判断哪个字段真正被修改的。简单地说,通过getModel方法获得的对象,被认为是脏的,实际并不是这样的。因此还是从库里查下对比保险,抑或还有什么好方法?
0
JFinal
JFinal

引用来自“Rajab”的答案

引用来自“JFinal”的答案

写个工具方法,用 java 反射调用 getModifyFlag 得到 Set 对象
@JFinal 对。可以。可是我又发现一个问题,在Controller中通过getModel(XXX.class)获得的对象,都已经调用了set方法将各属性注入到对象中,而在调用set方法的时候,实际上就把modifyFlag添加了,这样,我即便得到modifyFlag集合,实际上也是无法判断哪个字段真正被修改的。简单地说,通过getModel方法获得的对象,被认为是脏的,实际并不是这样的。因此还是从库里查下对比保险,抑或还有什么好方法?
你可以在 getModel 方法调用以后,立即反射清空一下 modifyFlag
0
Rajab
Rajab

引用来自“JFinal”的答案

引用来自“Rajab”的答案

引用来自“JFinal”的答案

写个工具方法,用 java 反射调用 getModifyFlag 得到 Set 对象
@JFinal 对。可以。可是我又发现一个问题,在Controller中通过getModel(XXX.class)获得的对象,都已经调用了set方法将各属性注入到对象中,而在调用set方法的时候,实际上就把modifyFlag添加了,这样,我即便得到modifyFlag集合,实际上也是无法判断哪个字段真正被修改的。简单地说,通过getModel方法获得的对象,被认为是脏的,实际并不是这样的。因此还是从库里查下对比保险,抑或还有什么好方法?
你可以在 getModel 方法调用以后,立即反射清空一下 modifyFlag

@JFinal 清空后我更加不知道那个字段是否被修改过了。我脑子转不过来了。getModel从表单获得的对象,看来是没有办法知道那个字段被改了,要不在前段提交表单前传来一个参数标记,要不在更新前从库里再查一次对比。

Rajab
Rajab
回复 @JFinal : 不是这样的,getModel是在更新对象的action中调用的,我想做的是,当前台传来的对象的某字段与库里相应的记录的字段值不一致(即用户在前台修改了)时,做相应的操作。
JFinal
JFinal
getModel 后马上用反射清空 modifyFlag,后续的各项操作造成的 modifyFlag 改变才是你想要的吧?
0
JFinal
JFinal
为啥要判断是否跟数据库中的值不一样才更新呢? 难道是担心类似hibernate不能单独更新某一字段的问题? 建议不去判断,直接更新
Rajab
Rajab
唉,其实我是走入一个误区了。本来这种事情在数据库里建个触发器就行了,关键是有些情况受数据库所限不能用触发器,你比如那个恶心的BAE,连视图都不能用。我这做是以为现在有1个表是分类表,有多级分类父子关系,有个字段记录着它的子分类的数目,因此在前台的时候用户修改了分类的话,相应分类的记数字段值加1,原来分类的记数字段减1,所以要判断下。
返回顶部
顶部