2015-11-03 34 views
0

請查看該項目:https://github.com/darzz/boot_bug 這是最簡單的設置,它重現了錯誤。* .hbm.xml映射文件未在測試中加載

描述: 應用程序堆棧是彈簧啓動與春季數據和彈簧批。 有testNamedQuery.hbm.xml文件在src/main/resources/queries

當從應用類批處理作業成功完成,在日誌中沒有異常運行。然而,從ApplicationNotWorking類,這是完全相同的副本,只是把測試源根目錄中運行時,批處理作業失敗:

Caused by: org.hibernate.MappingException: Named query not known: findPersonNames 
    at org.hibernate.internal.AbstractSessionImpl.getNamedQuery(AbstractSessionImpl.java:177) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
    at org.springframework.batch.item.database.HibernateItemReaderHelper.createQuery(HibernateItemReaderHelper.java:146) ~[spring-batch-infrastructure-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
    at org.springframework.batch.item.database.HibernateItemReaderHelper.getForwardOnlyCursor(HibernateItemReaderHelper.java:123) ~[spring-batch-infrastructure-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
    at org.springframework.batch.item.database.HibernateCursorItemReader.doOpen(HibernateCursorItemReader.java:185) ~[spring-batch-infrastructure-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
    at org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader.open(AbstractItemCountingItemStreamItemReader.java:144) ~[spring-batch-infrastructure-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
    ... 39 common frames omitted 

所以看起來是運行測試時,* .hbm .xml文件未加載! 經過研究和調試後,我想我可能會發現原因 - 持久性單元根URL是針對測試目標/測試類設置的,但映射文件位於/ target/classes中。

在我看來,可能的原因可能類似於什麼在這裏http://blog.carbonfive.com/2007/05/17/using-classpath-vs-classpath-when-loading-spring-resources/

描述,但我不知道,如何解決在春季啓動這個問題,而不只是爲了測試目的創建的persistence.xml配置。不想將主/資源中的* .hbm.xml文件複製到測試/資源中。

有沒有人有想法?

回答

0

,如果你想測試過程中加載的所有資源/豆,你應該寫測試以不同的方式比你有

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = Application.class) 
@TransactionConfiguration(defaultRollback = true) 
@Transactional 
public class DummyTest{ 

    @Test 
    public void test(){ 
     // 
    } 
} 

應該加載所有的資源與HBM映射

+0

嗨,不幸的是,這不是解決方案。我知道這是編寫測試的正確方法,但是在任何情況下都存在問題。 – darzz

0

嘗試增加@EnableJpaRepositories(basePackages="com.example.your.package")在您的存儲庫或您的配置類。