【发布时间】:2015-08-14 05:27:51
【问题描述】:
我正在学习使用 JPA。我有点困惑。
根据 JPA EntityManager 管理事务。但是一种设计模式是在 DAO 中注入 EntityManager。那么同一个事务怎么可能有不同的EntityManager呢?
这是我要解决的情况
我已经定义了 DAO
@Repository
JPARepository1 {
@PersistenceContext
protected EntityManager em;
....
.
@Repository
JPARepository2 {
@PersistenceContext
protected EntityManager em;
....
我有一个服务
@Service
public class ServiceImpl1 {
@Autowired
private JPARepository1 repo1;
@Autowired
private JPARepository2 repo2;
public void mainMethod(){
Object o= transactionalMethod1();
try{
transactionalMethod2(o);
}catch (Exception e){
transactionalMethod3(o);
}
}
private Object transactionalMethod1(){
....
}
private void transactionalMethod2(Object o){
....
}
private void transactionalMethod3(Object o){
....
}
然后我将从@Controller 调用mainMethod()。 在同一个服务中并使用同一个存储库,对 transactionalMethod1、transactionalMethod2 和 transactionalMethod3 进行事务处理的正确方法是什么。 如果 transactionalMethod2 中有异常,我希望它中止事务,但保留 transactionalMethod1 和 transactionalMethod3 的事务 谢谢,对不起我的英语
【问题讨论】:
-
谁说传入的
EntityMangers 不一样? -
嗯,我不知道。那么单例和所有 DAO 都使用相同的 EntityManger 吗?
-
我相信
EntityManager可能不止一个,但对于您的简单情况,您可以期望只有一个。