Весной, как я могу использовать ClassPathXmlapplicationContext, чтобы получить EntityManager?
-
19-09-2019 - |
Вопрос
С весной я могу автоматически разобраться со следующим свойством:
@PersistenceContext(unitName="foo") private EntityManager em;
Используя следующее, я могу вручную автоматически автопроводить бобовый "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);
Решение
Попробуйте позвонить
EntitiyManagerFactory factory =
(EntityManagerFactory) ctx.getBean("myEntityManagerFactoryBean")
EntityManager em = factory.createEntityManager();
где "MyEntityManagerFactorbean" LocalContainerEntityManagerFactoryBean
Но зачем вам это нужно?
Другие советы
Я использую Springjunit4classrunner
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:jndiContext-mock.xml",
"classpath:spring/testContext.xml" })
Тестирование CLASE вводится через фиктивный контекст. С этим аннотированным он получит менеджера объектов через инъекцию.
@PersistenceContext
protected HibernateEntityManager entityManager;