在Spring中,如何使用ClassPathXmlApplicationContext获取EntityManager?

时间:2009-12-11 22:37:30

标签: spring entitymanager

使用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);

2 个答案:

答案 0 :(得分:5)

尝试拨打

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

其中“myEntityManagerFactorBean”是您的LocalContainerEntityManagerFactoryBean

但你为什么需要呢?

答案 1 :(得分:1)

我使用SpringJUnit4ClassRunner

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

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

@PersistenceContext
protected HibernateEntityManager entityManager;