第一个方法是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());
}
try {
super.lock();
} catch (RowInconsistentException e) {
refresh(REFRESH_WITH_DB_ONLY_IF_UNCHANGED | REFRESH_CONTAINEES);
super.lock();
}
}