ADF 创建主表子表的先后顺序

来源:互联网 发布:冰镇西瓜 知乎 编辑:程序博客网 时间:2024/05/01 13:45

第一个方法是VO的RowImpl里的,后面的3个方法是EO Impl里的


实现VO的接口,重写其中的create方法,能是creatarow的时候先创建主表,然后创建字表,达到外键关联。

@Override

    protected void create(AttributeList attributeList) {
        super.create(attributeList);
        TdSuppdocImpl tdSuppdocImpl = this.getTdSuppdoc();
        MpCaseSuppdocImpl mpCaseSuppdocImpl = this.getMpCaseSuppdoc();
                
        try {
            tdSuppdocImpl.create(attributeList);
            mpCaseSuppdocImpl.setTdSuppdoc(tdSuppdocImpl);
            mpCaseSuppdocImpl.create(attributeList);
        } catch (JboException ex) {
            tdSuppdocImpl.revert();
            mpCaseSuppdocImpl.revert();
            throw ex;
        } catch (Exception otherEx) {
            otherEx.printStackTrace();
            tdSuppdocImpl.revert();
            mpCaseSuppdocImpl.revert();
        }        

    }


实现EO的接口,重写子表EO中的postChanges方法,能使子表在提交的时候 自动获取主表的row,从而避免出现找不到parent key的错误。能获取到主表的imple 前提是2表之间存在association,所以必须先实现主表的EO的接口,以及穿件association。(改变提交VO顺序)(当然 在创建VO的时候 你createRow的时候 根据主次关系,依次创建vo,也能避免找不到parent key的错误)

  @Override

    public void postChanges(TransactionEvent e) {
         if (getPostState() == STATUS_NEW ||
             getPostState() == STATUS_MODIFIED) {
             TdAdverseEventImpl adverseEvent = getTdAdverseEvent();
           if (adverseEvent != null) {
             if (adverseEvent.getPostState() == STATUS_NEW) {
               adverseEvent.postChanges( e );
             }
           }
         }    
        super.postChanges( e );

    }

重写EO的create方法 自动添加sequence 从而使得 create row时主键不需要主动set

  /**
     * Add attribute defaulting logic in this method.
     * @param attributeList list of attribute names/values to initialize the row
     */
    protected void create(AttributeList attributeList) {
        super.create(attributeList);
        SequenceImpl sequenceImpl =
            new SequenceImpl("TD_AE_E2B_PRI_SRC_SEQ", getDBTransaction());
        setId(sequenceImpl.getSequenceNumber().getBigDecimalValue());

    }


     public void lock() {
        try {
                super.lock();
            } catch (RowInconsistentException e) { 
                refresh(REFRESH_WITH_DB_ONLY_IF_UNCHANGED | REFRESH_CONTAINEES);
                super.lock();
            }
    }
0 0