我正在使用Spring 3.1.1.RELEASE,JUnit 4.8.1和Hibernate 4.1.0.Final。我在测试应用程序上下文中定义了这个:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="packagesToScan" value="org.myco.subco,com.parentco.fdr.myproject" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
</property>
<property name="dataSource" ref="dataSource"/>
<property name="jpaPropertyMap" ref="jpaPropertyMap" />
</bean>
如何在我的JUnit测试中将“packagesToScan”属性作为字符串获取?我试过了
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:test-context.xml" })
public class SerializableTest extends AbstractNTsubcoTests
{
@Autowired
private EntityManagerFactory m_entityManagerFactory;
@Test
public final void testSerializable()
{
final String packagesToScan = (String) m_entityManagerFactory.getProperties().get("packagesToScan");
System.out.println("packagesToScan:" + packagesToScan);
} // testSerializable
}
然而,上面打印出“null”,尽管事实上我在上下文中定义了一个非null值。
答案 0 :(得分:0)
该属性设置为org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean,而不是EntityManagerFactory。 LocalContainerEntityManagerFactoryBean不是EntityManagerFactory,它创建EntityManagerFactory。
查看Spring代码后,将在DefaultPersistenceUnitManager中设置packagesToScan属性,但无法获取其值。
我认为您可以使用默认值定义Spring属性,而不是查询该属性。
<property name="packagesToScan" value="${packagesToScan:org.myco.subco,com.parentco.fdr.myproject}" />
以下是如何获得它
@Value("${packagesToScan}")
private String packagesToScan;