En la primavera, ¿cómo uso un classpathxmlaPlaPicationContext para obtener un EntityManager?

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

  •  19-09-2019
  •  | 
  •  

Pregunta

Con Spring puedo autowire un bean con la siguiente propiedad:

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

Usando lo siguiente, puedo obtener el bean "SomeBean": Manualmente:

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

Sin embargo, no puedo entender cómo obtener directamente un EntityManager en particular. El caso de uso es que quiero escribir una prueba que obtenga todos los objetos EntityManager y ejecute consultas simples en ellos para asegurarse de que estén configurados correctamente. Para hacer esto, necesito poder obtener todos los objetos EntityManager del contexto de la aplicación. ¿Cómo puedo hacer eso?

Lo siguiente no funciona. Devuelve un mapa vacío.

Map<String,EntityManager> ems = ctx.getBeansOfType(EntityManager.class);
¿Fue útil?

Solución

Intenta llamar

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

donde "myentityManagerFactorBean" es tu LocalContainerEntityManagerFactoryBean

Pero, ¿por qué necesitarías eso?

Otros consejos

Yo uso el springjunit4classrunner

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

El clase bajo prueba se inyecta a través del contexto simulado. Con esto anotado, obtendrá el gerente de entidad mediante inyección.

@PersistenceContext
protected HibernateEntityManager entityManager;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top