主题:web应用service层的全局事物问题

各位大拿,目前公司在做一个企业的管理系统,系统设计把各业务相关的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类提交,感觉方法很笨
这个问题比较菜,向大拿们请教,系统是我设计不合理还是说有更好的解决思路,这种问题应该比较常见,大家一般都是如何设计的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值