Open stevenclaro opened 2 years ago
@Transactional @Override //是根据每一条的Task及FileID来执行这一个分解为子任务的 public Result startRuleReview(Integer id) { //1.校验 String key = RedisKeyConstants.FILE_REVIEW.concat(String.valueOf(id)); boolean lock = jedisUtils.lock(key, NumberConstants.THIRTY); if (!lock) { return Result.createError("任务锁定中"); } //RuleReviewTask task = ruleReviewTaskMapper.selectByPrimaryKey(id); JPARuleReviewTask task=jpaTaskRepository.getOne(id.longValue());
if (!ReviewTaskStateEnum.WATI_RULE_REVIEW.getState().equals(task.getStatus())) { return Result.createError("任务状态非待规则审核"); } //2.子任务创建 ruleReviewDetailMapper.delByTaskId(id); //创建之前,在子任务中,先将该主任务的id关联的记录,先删除掉.这个是异常数据检查.这个暂时用Mybtis //检查一下,在一个Transaction下,2种混合应用,可能存在的问题。如果不用,业务上需要单独将子表中的相关记录删除,但是主表的记录不动。 //下面的代码,整体上是将主任务根据manufactureid分解为子任务,并更新子任务的状态 //根据这个机构选择的规则集合,这样选择就是持久化的选择集合。也可以是每次让用户来传入这个规则集合。 List<RuleInfoDto>rules = ruleMapper.queryByDepart(task.getSysDepartId());
jpa: generate-ddl: false show-sql: true hibernate: ddl-auto: update properties: hibernate: connection: handling_mode: DELAYED_ACQUISITION_AND_HOLD event: merge: entity_copy_observer: allow open-in-view: false
问题描述 用户请求在碰到方法上的Tranaction注解的时候,会开启一个Session 然后在方法体中, 第一次 碰到Jpa dao层,开启事务,获取数据库连接,执行后不关闭 事务,但是没有关闭数据库连接。 第二次 碰到 Mybatis dao 层,根据事务传播机制,获取Jpa上获取的事务,获取数据库连接,执行后不关闭事务,没有关闭数据库连接。 方法体退出时候,关闭事务,关闭连接,关闭Session 这个理解是否正确,在jpa,与mybatis 2个dao层混用的情况下,原理得比较清楚,否则错误很难排查?
需要搞清楚:数据源,连接,事务的关系。
@Transactional @Override //是根据每一条的Task及FileID来执行这一个分解为子任务的 public Result startRuleReview(Integer id) {
//1.校验
String key = RedisKeyConstants.FILE_REVIEW.concat(String.valueOf(id));
boolean lock = jedisUtils.lock(key, NumberConstants.THIRTY);
if (!lock) {
return Result.createError("任务锁定中");
}
//RuleReviewTask task = ruleReviewTaskMapper.selectByPrimaryKey(id);
JPARuleReviewTask task=jpaTaskRepository.getOne(id.longValue());
jpa: generate-ddl: false show-sql: true hibernate: ddl-auto: update properties: hibernate: connection: handling_mode: DELAYED_ACQUISITION_AND_HOLD event: merge: entity_copy_observer: allow open-in-view: false
问题描述 用户请求在碰到方法上的Tranaction注解的时候,会开启一个Session 然后在方法体中, 第一次 碰到Jpa dao层,开启事务,获取数据库连接,执行后不关闭 事务,但是没有关闭数据库连接。 第二次 碰到 Mybatis dao 层,根据事务传播机制,获取Jpa上获取的事务,获取数据库连接,执行后不关闭事务,没有关闭数据库连接。 方法体退出时候,关闭事务,关闭连接,关闭Session 这个理解是否正确,在jpa,与mybatis 2个dao层混用的情况下,原理得比较清楚,否则错误很难排查?