在用jfinal声明式事务的时候不能主动回滚,报错是故意的,发现不能回滚是不是哪里写错了!下面是我的代码
@Before(Tx.class)
public void saveTop(EnPtype ptype, EnTop enTop, Ret ret, Integer oldTopID){
if (ptype.getProID() == null) {
ptype.save();
}
if (oldTopID != null && oldTopID > 0) {
String sql = "UPDATE en_top SET topstate = ? WHERE topID = ?";
Db.update(sql, 2, oldTopID);
}
String topName = ptype.getPTypeFrom() + "-" + ptype.getPTypeName();
enTop.setTopName(topName);
enTop.setProjectType(ptype.getProID());
enTop.save();
String[] stageName = {"开始阶段", "施工阶段", "收尾阶段"};
List<EnTopstage> stageList = new ArrayList<>();
for (int i = 0; i < stageName.length; i++) {
EnTopstage topstage = new EnTopstage();
topstage.setStageName(stageName[i]);
topstage.setTopID(enTop.getTopID());
topstage.save();
stageList.add(topstage);
}
String s1 = "s";
Integer.valueOf(s1);
List<EnTopnode> topData = (List<EnTopnode>) ret.get("enTopNodeList");
//保存节点
for (EnTopnode topnode : topData) {
String last = topnode.getNodeLast();
String l = "";
for (String s : last.split(",")) {
if (s == "") continue;
l += topData.get(Integer.parseInt(s)).getNodeID() + ",";
}
Integer nodeStage = topnode.getNodeStage()-1;
if (nodeStage >= 0) {
topnode.setNodeStage(stageList.get(nodeStage).getStageID());
}
topnode.setNodeLast(l);
topnode.setTopID(enTop.getTopID());
topnode.save();
}
//更新节点 写入后续节点ID
for (EnTopnode topnode : topData) {
String next = topnode.getNodeNext();
String n = "";
for (String s : next.split(",")) {
if (s == "") continue;
n += topData.get(Integer.parseInt(s)).getNodeID() + ",";
}
topnode.setNodeNext(n);
topnode.update();
}
List<List<EnTopnodeoption>> option = (List<List<EnTopnodeoption>>) ret.get("option");
for (List<EnTopnodeoption> list : option) {
if (list == null) continue;
for (int i = 0; i < list.size(); i++) {
EnTopnodeoption topnodeoption = list.get(i);
Integer nodeID = topnodeoption.getNodeID();
topnodeoption.setNodeID(topData.get(nodeID).getNodeID());
topnodeoption.setOpOrder(i);
topnodeoption.save();
}
}
}