spring data jpa + spring mvc的事务控制问题 50
问题大概是这样的,如下@Transactionalpublicvoidsave(Aa){a=aRepository.save(a);Bb=newB();b.setAId(...
问题大概是这样的,如下
@Transactional
public void save(A a){
a = aRepository.save(a);
B b = new B();
b.setAId(a.getId());
bRepository.save(b);
}
这样是获取不到a对象的id的,因为方法没有执行完,这个事务没有提交,数据没有更新到数据库,请问如果我想在save之后通过返回的对象就能拿到主键需要怎么做,事务是肯定需要这么配置的,那我应该怎么办呢?
spring配置如下:
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
<context:annotation-config/>
<context:load-time-weaver weaver-class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
<context:component-scan base-package="org.reststackteam.reststack"/>
<jpa:repositories base-package="org.reststackteam.reststack.repositories"/> 展开
@Transactional
public void save(A a){
a = aRepository.save(a);
B b = new B();
b.setAId(a.getId());
bRepository.save(b);
}
这样是获取不到a对象的id的,因为方法没有执行完,这个事务没有提交,数据没有更新到数据库,请问如果我想在save之后通过返回的对象就能拿到主键需要怎么做,事务是肯定需要这么配置的,那我应该怎么办呢?
spring配置如下:
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
<context:annotation-config/>
<context:load-time-weaver weaver-class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
<context:component-scan base-package="org.reststackteam.reststack"/>
<jpa:repositories base-package="org.reststackteam.reststack.repositories"/> 展开
展开全部
为什么这么做?怎么不用OneToOne, cascadeType=All来做?这样只需要b.setA(A),bRepository.save(b)就好了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用spring的事务模板可以手动控制事务提交,这样你就能拿到a的id了。
追问
这个问题我解决了,虽然不是手动控制事务的提交,不过到也差不多,只需要让Repository接口集成JpaRepository就可以了,里面有flush方法,可以刷新缓存,而且支持自动回滚事务
这个问题我解决了,虽然不是手动控制事务的提交,不过到也差不多,只需要让Repository接口集成JpaRepository就可以了,里面有flush方法,可以刷新缓存,而且支持自动回滚事务
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询