【发布时间】:2014-01-17 08:05:00
【问题描述】:
我有一个全名为foo.bar.Book 的实体类。我写了一个简单的测试类如下:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"/beans-test.xml", "/dataSource-test.xml"})
public class BookTest {
@PersistenceContext EntityManager entityManager;
@Transactional
@Test
public void test() {
Book book = new Book();
book.setTitle("Hello");
entityManager.persist(book);
}
}
在dataSource-test.xml,我有
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceXmlLocation" value="classpath:META-INF/persistence-test.xml" />
<property name="persistenceUnitName" value="tempWarPU" />
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="foo.bar.*" />
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
</property>
</bean>
注意上面有个属性packagesToScan,应该是让Spring能够找到foo.bar.Book。然而,这并没有发生。我收到这样的错误:
java.lang.IllegalArgumentException: Unknown entity: foo.bar.Book
尽管如此,如果我将下面的行添加到 persistence-test.xml 中显示的 entityManagerFactory 的 bean 定义中,测试将通过:
<class>foo.bar.Book</class>
所以,在我看来,packagesToScan 属性并没有真正起作用。真的吗?如果是这样,我怎样才能让 Spring 自动扫描实体类?我尝试将<exclude-unlisted-classes>false</exclude-unlisted-classes> 放入persistence-test.xml,但这没有帮助。
非常感谢。
更新
Spring的版本是4.0.0.RELEASE。
我也尝试了如下的非通配符方式,但没有运气。
<property name="packagesToScan" value="foo.bar" />
【问题讨论】:
-
属性是
packagesToScan,它接受包名,而不是通配符。