4

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);
4

2 に答える 2

5

電話してみる

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

「myEntityManagerFactorBean」はあなたのLocalContainerEntityManagerFactoryBean

しかし、なぜそれが必要なのですか?

于 2009-12-11T22:44:49.970 に答える
1

SpringJUnit4ClassRunner を使用します

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

テスト対象のクラスは、モック コンテキストを介して注入されます。これに注釈を付けると、インジェクションを介してエンティティマネージャーが取得されます。

@PersistenceContext
protected HibernateEntityManager entityManager;
于 2012-03-04T10:52:47.940 に答える