这个时候需要一条数据一条数据的手动提交 ,
导致如果把定时器放在service层用aop事务自动提交提 ,根据一个 前辈的说明 , 在调用发票的时候手动开启事务 , 进行保存操作 ,外面的事务会失效 ,要的就是这种效果 ,当项目运行的时候发现 一个问题 , 明明接口回调成功 ,但是 发票信息都为空 , 这个问题找了发票接口 , 以及各个影响回来发现还是这里的事务问题 ,以及hibernate 自动提交等问题 .
在定时器里面 , 实体类通过hibernate获取 , set 到账信息以后 , 这个实体类 不管调不调 保存更新方法 ,他都会保存到数据库 .
现在这个情况 ,就是 获取这个实体类 set到账状态 ,生成docCode 并且set 手动提交事务进行保存 , 发票回调顺利通过 docCode找到这个实体类 , 然后保存发票信息 . 重点就是 最后一步 整个定时器走完之后 由于set过实体类 整个事务又提交了一次 把发票的信息都给覆盖掉了
从这里就可以看出 , 首先是 整个aop的事务没有失效 , 另外 就是实体类a set后值自动保存了, 根据分析代码发现 首先是 要想手动提交后 整个aop事务失效, 首先是 手动提交的事务是当前session
.getSessionFactory().getCurrentSession();
也就是需要调用这个方法 而我为了 , 防止出现获取线程为null的情况 使用
.getSessionFactory().openSession();
导致外层aop事务没有失效 ,