我想要做的是通过
XML注入几乎与通过A @PersistenceContext注释完成的方法相同.我需要这个,因为我有不同的实体经理我需要注入到同一个DAO.数据库彼此镜像,我宁愿拥有一个基类,对于该基类的实例,然后创建多个类,以便我可以使用@PersistenceContext注释.
这是我的例子.这是我现在在做的,它的作品.
- public class ItemDaoImpl {
- protected EntityManager entityManager;
- public List<Item> getItems() {
- Query query = entityManager.createQuery("select i from Item i");
- List<Item> s = (List<Item>)query.getResultList();
- return s;
- }
- public void setEntityManger(EntityManager entityManager) {
- this.entityManager = entityManager;
- }
- }
- @Repository(value = "itemDaoStore2")
- public class ItemDaoImplStore2 extends ItemDaoImpl {
- @PersistenceContext(unitName = "persistence_unit_2")
- public void setEntityManger(EntityManager entityManager) {
- this.entityManager = entityManager;
- }
- }
- @Repository(value = "itemDaoStore1")
- public class ItemDaoImplStore1 extends ItemDaoImpl {
- @PersistenceContext(unitName = "persistence_unit_1")
- public void setEntityManger(EntityManager entityManager) {
- this.entityManager = entityManager;
- }
- }
事务管理器,实体管理器定义如下…
- <!-- Registers Spring's standard post-processors for annotation-based configuration like @Repository -->
- <context:annotation-config />
- <!-- For @Transactional annotations -->
- <tx:annotation-driven transaction-manager="transactionManager1" />
- <tx:annotation-driven transaction-manager="transactionManager2" />
- <!-- This makes Spring perform @PersistenceContext/@PersitenceUnit injection: -->
- <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
- <!-- Drives transactions using local JPA APIs -->
- <bean id="transactionManager1" class="org.springframework.orm.jpa.JpaTransactionManager">
- <property name="entityManagerFactory" ref="entityManagerFactory1" />
- </bean>
- <bean id="transactionManager2" class="org.springframework.orm.jpa.JpaTransactionManager">
- <property name="entityManagerFactory" ref="entityManagerFactory2" />
- </bean>
- <bean id="entityManagerFactory1" class="org.springframework.orm.jpa.LocalContainerEntityManagerfactorybean">
- <property name="persistenceUnitName" value="persistence_unit_1"/>
- ...
- </bean>
- <bean id="entityManagerFactory2" class="org.springframework.orm.jpa.LocalContainerEntityManagerfactorybean">
- <property name="persistenceUnitName" value="persistence_unit_2"/>
- ...
- </bean>
我想做的是不创建类ItemDaoImplStore2或ItemDaoImplStore1.我想通过xml将这些作为ItemDaoImpl的实例.我不知道如何注入实体管理员.我想要模拟这个注释为“Repository”注解,我也希望能够通过持久化单元名称来指定要注入的entityManager.我想用类似于下面的东西来使用XML.
- <!-- Somehow annotate this instance as a @Repository annotation -->
- <bean id="itemDaoStore1" class="ItemDaoImpl">
- <!-- Does not work since it is a LocalContainerEntityManagerfactorybean-->
- <!-- Also I would perfer to do it the same way PersistenceContext works
- and only provide the persistence unit name. I would like to be
- able to specify persistence_unit_1-->
- <property name="entityManager" ref="entityManagerFactory1"/>
- </bean>
- <!-- Somehow annotate this instance as a @Repository annotation -->
- <bean id="itemDaoStore2" class="ItemDaoImpl">
- <!-- Does not work since it is a LocalContainerEntityManagerfactorybean-->
- <!-- Also I would perfer to do it the same way PersistenceContext works
- and only provide the persistence unit name. I would like to be
- able to specify persistence_unit_2-->
- <property name="entityManager" ref="entityManagerFactory2"/>
- </bean>
使用SharedEntityManagerBean – 它为EntityManagerFactory创建一个共享的EntityManager,与@PersistenceContext相同:
- <bean id="itemDaoStore1" class="ItemDaoImpl">
- <property name="entityManager">
- <bean class = "org.springframework.orm.jpa.support.SharedEntityManagerBean">
- <property name = "entityManagerFactory" ref="entityManagerFactory1"/>
- </bean>
- </property>
- </bean>