4

使用 Spring,我可以自动装配具有以下属性的 bean:

@PersistenceContext(unitName="foo") private EntityManager em;

使用以下内容,我可以手动自动装配 bean“someBean”:

ClassPathXmlApplicationContext ctx = 
      new ClassPathXmlApplicationContext("META-INF/applicationContext.xml");
AutowireCapableBeanFactory fac = ctx.getAutowireCapableBeanFactory();
fac.autowireBean(someBean);

但是,我无法弄清楚如何直接获取特定的 EntityManager。用例是我想编写一个测试,它将获取所有 EntityManager 对象并在其中执行简单的查询以确保它们设置正确。为此,我需要能够从应用程序上下文中获取所有 EntityManager 对象。我怎样才能做到这一点?

以下不起作用。它返回一个空地图。

Map<String,EntityManager> ems = ctx.getBeansOfType(EntityManager.class);
4

2 回答 2

5

试着打电话

EntitiyManagerFactory factory = 
          (EntityManagerFactory) ctx.getBean("myEntityManagerFactoryBean")
EntityManager em = factory.createEntityManager();

“myEntityManagerFactorBean”是你的LocalContainerEntityManagerFactoryBean

但是你为什么需要那个?

于 2009-12-11T22:44:49.970 回答
1

我使用 SpringJUnit4ClassRunner

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:jndiContext-mock.xml", 
                                    "classpath:spring/testContext.xml" })

被测类是通过模拟上下文注入的。有了这个注释,它将通过注入获得实体管理器。

@PersistenceContext
protected HibernateEntityManager entityManager;
于 2012-03-04T10:52:47.940 回答