当前位置: 首页 > 知识库问答 >
问题:

*.hbm.xml测试中未加载的映射文件

公羊英达
2023-03-14

请看一下这个项目:https://github.com/darzz/boot_bug这是复制错误的最小设置。

描述:应用程序堆栈是Spring Boot,包含Spring数据和Spring批处理。有testNamedQuery。hbm。src/main/resources/querys下的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文件从主/资源复制到测试/资源。

有人有主意吗?

共有2个答案

慕容兴贤
2023-03-14

尝试在存储库或配置类中添加EnableJpaRepositories(basePackages=“com.example.your.package”)。

徐鸿达
2023-03-14

如果您想在测试期间加载所有资源/bean,那么应该以不同的方式编写测试

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

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

这应该使用hbm映射加载所有资源

 类似资料:
  • 这个问题很难解释,所以请看看这个项目:https://github.com/darzz/boot_bug这是复制错误的最小设置。 描述:应用程序堆栈是Spring Boot,包含Spring数据和Spring批处理。有testNamedQuery。hbm。src/main/resources/querys下的xml文件。 从应用程序类运行时,批处理作业成功完成,日志中没有异常。但是,当从Appli

  • 问题内容: 是否可以将hbm.xml的hibernate映射嵌入到jar中,并避免在applicationContext.xml中手动引用,例如 并指向一个jar/等? Nhibernate可以选择一个程序集,从该程序集拾取hbm。 注释不是一种选择 编辑: 编辑:我的意图是删除对hbm的手动引用,并指向hibernate可以从中获取的通用位置 问题答案: 还要澄清一下:您正在专门一起谈论Spri

  • 我使用Hibernate已经有一段时间了,而且非常成功。然而,我昨天遇到了一个问题,这里的答案将在将来节省大量调试时间。 我忘了在我的hibernate中添加hibernate映射。新实体的cfg。 当我试图加载这个实体时,我本以为会得到某种运行时异常,但它却什么也没加载,继续运行,好像一切都很好。 我正在使用以下代码加载实体。 我想一个错误,如果我尝试加载一个实体,没有映射在我的hibernat

  • 前端将这个json发送到我的API 控制器:

  • 然后我可以访问index.html,但是当我试图单击链接以使用servlet时,我得到了一个not file错误,说/home/cubouyaka/web/apache-tomcat-8.5.38/webapps/searchengine/servlet/search不存在,但是我在web.xml中进行了映射,所以我不明白为什么我会得到这个错误。 有人能帮帮我吗?我已经浪费了很多时间试图解决这个问

  • 我使用的是一个用MapStruct生成的映射器: 缺省组件模型是spring(在pom.xml中设置)