Весной, как я могу использовать ClassPathXmlapplicationContext, чтобы получить EntityManager?

StackOverflow https://stackoverflow.com/questions/1891320

  •  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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top