作为一名学生,我阅读了几乎所有的春季文档.据我所知,春天是配置怪物.基于注释或基于Xml,它没关系,但我真正不理解的是事务管理器和实体管理器之间的区别.
如果我们在Dao层上注入了entityManager,为什么我们需要服务层上的事务管理器,反之亦然.如果我们注入事务管理器(包装实体管理器)为什么我们需要在DaoLayer上注入entitymanager.对于JPARepositories,我甚至不需要注入任何经理. Spring为我做了一切(我真的不懂机械).我的另一个问题是JPARepositories Spring使用entityManager还是transactionManager?
最佳答案
TransactionManager与EntityManager完全不同,一个负责实体(监听器,实体,关系,它们的持久性生命周期以及此接口定义用于与持久性上下文交互的方法)与特定持久性上下文相关联的实体同时,TransactionManager负责事务数据访问,支持应用程序中需要进行的所有事务.
配置将一个entitymanager对象绑定到特定的事务管理器.
factorybean" id="entityManagerFactory">
这意味着与数据库和实体的连接由EntityManager管理,但使用@Transaction批注在服务层中打开close事务的对象是TransactionManager.
javax.transaction.TransactionManager接口允许应用程序服务器代表正在管理的应用程序控制事务边界,该接口包含许多用于控制它们的方法,例如:commit,suspend,rollback.
因此,基本上注入其中一个对象取决于您要查找的内容,管理实体并使用它们操作使用entitymanager,通过自己使用transactionmanager控制应用程序的事务状态.