Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

接手一个Mybtisplus的项目,采用Jpa进行重构。在Service层有原来的Mybatis的访问数据库的代码。在替换过程中,是逐渐替换的,会存在在一个Service方法中,访问数据库的代码,有Jpa,与Mybatis共存的情况。 #44

Open
stevenclaro opened this issue Mar 15, 2022 · 1 comment

Comments

@stevenclaro
Copy link

@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层混用的情况下,原理得比较清楚,否则错误很难排查?

@zhangzhenhuajack
Copy link
Owner

需要搞清楚:数据源,连接,事务的关系。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants