通过以下的注解和spring配置文件就可以实现事务的管理了,验证起来是这样的,查了很多资料 发现通过@PersistenceContext注解得到的EntityManager 是由PersistenceAnnotationBeanPostProcessor调用SharedEntityManagerCreator.createSharedEntityManager(
emf, this.properties, this.synchronizedWithTransaction, getResourceType()) ,再由代理创建的,假如想通过注入的方式放到SimpleJpaRepository里 而不是现在显示的调用构造函数的话 可以做到吗
想po脑袋还是觉得不行啊 首先本人不会在配置文件里给SimpleJpaRepository的构造函数的参数把容器管理的EntityManager翻进去,不知道怎么获取,假如不获取容器里的 而是本人创建EntityManager 那还有意义吗 就得本人管理了吧
emf, this.properties, this.synchronizedWithTransaction, getResourceType()) ,再由代理创建的,假如想通过注入的方式放到SimpleJpaRepository里 而不是现在显示的调用构造函数的话 可以做到吗
想po脑袋还是觉得不行啊 首先本人不会在配置文件里给SimpleJpaRepository的构造函数的参数把容器管理的EntityManager翻进去,不知道怎么获取,假如不获取容器里的 而是本人创建EntityManager 那还有意义吗 就得本人管理了吧
public class JpaDaox<T>{ @PersistenceContext private EntityManager entityManager; private SimpleJpaRepository simpleJpaRepository; public Object get(Class<?>T,Serializable id){ simpleJpaRepository=new SimpleJpaRepository(T,entityManager); Object object= simpleJpaRepository.findOne(id); return object; } @Transactional public void save(T t) { Class clazz=t.getClass(); simpleJpaRepository=new SimpleJpaRepository(clazz,entityManager); simpleJpaRepository.save(t); //throw new RuntimeException("dddd"); }}
<context:annotation-config /> <context:component-scan base-package="jpa_data" /> <tx:annotation-driven transaction-manager="transactionManager" /> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="persistenceXmlLocation" value="META-INF/persistence.xml" /> <property name="persistenceUnitName" value="SimplePU" /> </bean> <bean id="jpaDao" class="spring.data.jpa.JpaDaox"> </bean>
解决方案:10分
解决方案:10分
LZ的代码问题太多你的JpaDao是不是已经在spring容器里面跑了,假如是LZ在JpaDao里面又用new ClassPathXmlApplicationContext(“meta-inf/beans.xml”);等于又启用了一个spring容器,问题大大的。还有你的SimpleJpaRepository simpleJpaRepository干嘛要一直new啊
解决方案:20分
你的JpaDao已经是dao层了干嘛还要用SimpleJpaRepository,直接用entityManager操作就行了,simpleJpaRepository应该是给你的JpaDao继承用的应该是JapDao<T> extends SimpleJpaRepository<T>,直接用spring的@PersistenceContext注入entityManager就行了,没必要整那么多