各位大拿,目前公司在做一个企业的管理系统,系统设计把各业务相关的dao继承自basedao,basedao是一些通用方法,在services这一层封装不同dao的操作逻辑,有个问题很困惑,举例studao是一些对学生的操作实现, 比如添加、修改学生信息等,classdao是对班级信息的维护,当然这里面也是实现比较单纯的对班级的添加、修改等,通过stuservice封装对学生的操作,如果有一个操作比如添加学生信息格式如下:
姓名 性别 学号 班级
张三 男 2121 XG02-1
操作描述:stu table和class table有主外建的关联关系,即stu表班级字段存放的是class表的主键,操作要求,添加一个学生的信息,1.如果所填班级在class表中存在,则取class表对应的主键id作为stu表的班级字段内容,添加一条学生信息,2.如果所填班级在class表中不存在则,把该班级添加至class表,取出其主键作为stu表的班级字段对应外键,添加一条学生信息
问题疑惑:我在stuservice里封装关于stu和class的相关操作,如果我新增一条学生,出现上面问题描述的2.的问题,当班级不能和class表对应时,即class表内不存在该班级时,需要执行insert把该班级插入到class表,这个时候我调用的是classdao里的insertclass方法,事物已经提交,第二步,在stuservice里调用studao的insertstu方法插入学生,如果此时插入失败,无法把刚才插入的class信息回滚
目前解决思路:增加一个GlobaleTransaction类,在该类负责产生一个新的session,利用该session获得transaction对象,在classdao和studao内的增加不手动提交事物的方法,操作完毕后,由GlobaleTransaction类提交,感觉方法很笨
这个问题比较菜,向大拿们请教,系统是我设计不合理还是说有更好的解决思路,这种问题应该比较常见,大家一般都是如何设计的
主题:web应用service层的全局事物问题
最新推荐文章于 2020-10-18 00:22:39 发布