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