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

Spring护套*。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文件从主/资源复制到测试/资源。

有人有主意吗?

共有3个答案

蒋高超
2023-03-14

我研究了git项目。似乎需要更改应用程序NotWorking。java,因为它是一个测试类,因此应该是以下内容:

//src/test/java

package bug;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.stackoverflow.springboot.BatchProcessing;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class )
public class ApplicationNotWorking {
    //Inject required bean which you want to test.
    @Autowired
    private BatchProcessing bProcess;
    //If above @Autowired BatchProcessing  do not work then you can object  
    //directly to kick off the test. BatchProcessing bProcess = new 
    //BatchProcessing();    

    //This way you can test each method
    @Test
    public void testBatchProcessing(){
        System.out.println("***BatchProcessing: " + bProcess.batchProcess());
    }
}
丌官炎彬
2023-03-14

如果我正确理解了这个问题,那么您希望运行Spring Boot测试,该测试应该会出现*。来自类路径的hbm文件。

你把*放在哪里了。hbm文件?

您必须确保所有*. hbm文件都保存在src/main/资源下。因此,当您运行测试类时,它将调用引用来自src/main/资源的*. hbm文件的实际类。

如果上述解决方案没有帮助,那么您需要共享您的项目文件结构。

公羊宇定
2023-03-14
@Autowired
private ResourceLoader rl;


@Bean
public LocalSessionFactoryBean sessionFactory() throws IOException {
    LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
    sessionFactoryBean.setMappingLocations(loadResources());
    return sessionFactoryBean;
}

public Resource[] loadResources() {
    Resource[] resources = null;
    try {
        resources = ResourcePatternUtils.getResourcePatternResolver(rl)
            .getResources("classpath:/hibernate/*.hbm.xml");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return resources;
}
 类似资料:
  • 请看一下这个项目:https://github.com/darzz/boot_bug这是复制错误的最小设置。 描述:应用程序堆栈是Spring Boot,包含Spring数据和Spring批处理。有testNamedQuery。hbm。src/main/resources/querys下的xml文件。 从应用程序类运行时,批处理作业成功完成,日志中没有异常。但是,当从ApplicationNotW

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

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

  • 我在使用spring-boot-devtools时遇到了一个问题,当应用程序启动时,spring boot加载了控制器中定义的所有映射。

  • 并将属性加载到映射中,结果为: 有什么想法如何创建一个映射策略吗?

  • XML 映射配置文件 MyBatis 的 XML 配置文件包含了影响 MyBatis 行为甚深的设置和属性信息。 XML 文档 的高层级结构如下: configuration 配置 properties 属性 settings 设置 typeAliases 类型命名 typeHandlers 类型处理器 objectFactory 对象工厂 plugins 插件 environments 环境 e