请查看该项目:https://github.com/darzz/boot_bug 这是最小化的设置,可以重现错误。
描述: 应用程序堆栈是Spring Boot with Spring Data和Spring Batch。 src / main / resources / queries 下有 testNamedQuery.hbm.xml 文件。
从 应用程序 类运行时,批处理作业成功完成,日志中没有例外。但是,当从 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/
但是我不知道如何在Spring Boot中解决这个问题,而不是为了测试目的而创建persistence.xml配置。不希望将* .hbm.xml文件从main / resources复制到test / resources。
有没有人有想法?
答案 0 :(得分:0)
如果你想在测试期间加载所有资源/ bean,你应该以不同的方式编写测试
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@TransactionConfiguration(defaultRollback = true)
@Transactional
public class DummyTest{
@Test
public void test(){
//
}
}
应该使用hbm映射加载所有资源
答案 1 :(得分:0)
尝试在您的存储库或配置类中添加@EnableJpaRepositories(basePackages="com.example.your.package")
。