SessionFacade的update方法改改,加上LOG不就行了???

解决方案 »

  1.   

    绿色毒汁) :怎么加log?我现在关键是不能判断出update时候,到底哪些字段发生了变化。
      

  2.   

    物品跟你说过在Dto的set方法里写日志啊!!
    因为改变DTO都是要调用set方法的
      

  3.   

    我不是问在哪里写日志,我是问怎么判断哪些字段发生变化呀,即使是dto的set方法,他也是把所有字段都set一遍,我怎么知道哪些字段是修改过的,哪些字段的值没发生变化呢
      

  4.   

    哪就在update方法前先查询一下相应的记录并氢把原来的value取出来比较一下,将不一样的字段改变前与后的值打到日志里。然后执行update.
      

  5.   

    一种办法是你给DTO里所有的属性加一个dirtyFlag,你可以放到DTO内一个HashMap里,也可以是N多boolean附加属性。一旦一个DTO的setter被调用,相应的dirtyFlag被设置。
    然后再你的SessionFacade的update方法里,看看哪些dirtyFlag为true的属性,做日志,并持久化。个人认为,挺麻烦的,大量类似重复简单逻辑,可以考虑Aspect.
      

  6.   

    绿色毒液:请问你说的DTO里面setter方法是指  public void setUppernodeid(BigDecimal xx){}类似的方法吗?不知是不是我没明白你的意思,在update之前肯定所有的set方法都会被调用一次的,如果判断你说的那个标志dirtyFlag发生变化了呢。我们这边可能不用其他的产品,Aspect可能用不了。
      

  7.   

    如果实在想不出好的,在更新前取出比一下,变的加个flag,然后写log
    不过这样的效率太低了
      

  8.   

    wcmj(望尘莫及):这个办法太笨了,而且以后实现起来太麻烦了。
      

  9.   

    如果实在想不出好的,在更新前取出比一下,变的加个flag,然后写log
    不过这样的效率太低了>>> 我认为,你完全可以在更新前检查,可以考虑用 proxy 实现。效率?我认为
    这里是实现功能,该做的事没有作,就谈不上效率。
      

  10.   

    Rurama(佩华) :Oracle9i 数据库
      

  11.   

    谁有好的办法吗,请告诉我,谢谢 我认为,你完全可以在更新前检查,可以考虑用 proxy 实现。效率?我认为
    这里是实现功能,该做的事没有作,就谈不上效率。---
    proxy只是实现模式上不一样,我现在关键是问怎么做比较好,那种单纯靠比较获取太麻烦了。视图中是可以记录的。这个不应程式中实现。而是在数据库中实现。不知你用的是什么数据库.
    ----
    好像这个问题靠视图是完成不了我的需求的。
      

  12.   

    在值对象的setter方法中比对新旧值,如果发现变更,调用相应处理比如:(自己改写setLog方法)
    //原setter方法未做处理
    public void setG_BANKID(String g_BANKID) {
    G_BANKID = g_BANKID;//等同this.G_BANKID = g_BANKID
    }
    //新setter方法
    private String log;
            public void setG_BANKID(String g_BANKID) {
                      if (!G_BANKID.equals(BANKID) ) {
                      setLog(G_BANKID,BANKID);
    G_BANKID = g_BANKID;//等同this.G_= g_BANKID;
                      }
    }
    public void setLog(String para1,String para2){
                 log=log+",["+para1+"]["+para2+"]"
    }
      

  13.   

    而且可以在setter方法中加一个更改标志(默认false),如果标志改变,再调用SessionFacade处理
      

  14.   

    private String log;
            public void setG_BANKID(String g_BANKID) {
                      if (!G_BANKID.equals(g_BANKID) ) {
                      setLog(G_BANKID,BANKID);
    G_BANKID = g_BANKID;//等同this.G_= g_BANKID;
                      }
    }
    public void setLog(String para1,String para2){
                 log=log+",["+para1+"]["+para2+"]"
    }