0

我正在使用 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”。

4

1 回答 1

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;
于 2013-11-04T16:03:54.730 回答