2014-01-17 119 views
3

我有一個實體類,其全名是foo.bar.Book。我寫了下面一個簡單的測試類:屬性`packagesToScan`不工作

@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> 

因此,它似乎我財產是不是真的工作。真的嗎?如果是這樣,我該如何讓Spring自動掃描實體類?我嘗試將<exclude-unlisted-classes>false</exclude-unlisted-classes>放入persistence-test.xml,但這沒有幫助。

非常感謝。

更新

春天的版本是4.0.0.RELEASE

我也嘗試過非通配方式,但沒有運氣。

<property name="packagesToScan" value="foo.bar" /> 
+0

的屬性是'packagesToScan '它需要包名稱,而不是通配符。 –

回答

-1

嘗試下面一行在您的配置文件

<property name="packagesToScan" value="foo.bar" /> 
3
<property name="persistenceUnitName" value="test-pu" /> 
<property name="packagesToScan"> 
    <list> 
     <value>abc.xyz.entity.**.*</value> 
    </list> 
</property> 

這兩個屬性不會一起工作。
1. persistence.xml存在,LocalContainerEntityManagerFactoryBean指定persistenceUnitName 2. LocalContainerEntityManagerFactoryBean用掃描定義持久性單元。

如果你要檢查這個behawior調試:org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager 方法:readPersistenceUnitInfos,buildDefaultPersistenceUnitInfo

使我的測試,在春天3.2.8

+0

感謝您的回答。但是,對我來說這看起來有些困惑。所以,當你說「這兩個屬性」時,你指的是哪兩個屬性?此外,你是否說'persistenceUnitName'應該定義一個名稱,而不是從持久xml中引用名稱?無論如何,一些澄清是非常感謝。 – JBT