获取@PersistenceContext注解得到的EntityManager

J2EE 码拜 9年前 (2015-11-15) 7231次浏览
通过以下的注解和spring配置文件就可以实现事务的管理了,验证起来是这样的,查了很多资料 发现通过@PersistenceContext注解得到的EntityManager 是由PersistenceAnnotationBeanPostProcessor调用SharedEntityManagerCreator.createSharedEntityManager(
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分
不用构造,利用EntityManagerFactory.createEntityManager();你的EntityManagerFactory已经交给spring管理了,只要利用spring的applicationContext.getBean(“entityManagerFactory”)就可以获得EntityManagerFactory实例
解决方案: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就行了,没必要整那么多

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明获取@PersistenceContext注解得到的EntityManager
喜欢 (0)
[1034331897@qq.com]
分享 (0)