【问题标题】:Using orm.xml in tests of SpringBoot 2.0在 SpringBoot 2.0 的测试中使用 orm.xml
【发布时间】:2018-07-31 09:13:18
【问题描述】:

我有一个 SpringBoot 2.0 应用程序,我决定使用 orm.xml 混合注释和 XML 配置。所以,我把orm.xml(带有XML配置的JPA文件)放在resources/META-INF中,在启动应用程序时,它被考虑在内,一切都很好,它就像一个魅力。

但是,在运行集成测试(使用内存数据库)时,orm.xml 似乎被完全忽略了,因为测试失败并出现与缺少映射相关的异常,我在@987654326 中编写了映射@(一个可嵌入的实体)。

这是一个测试的样子:

package hello;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
@DataJpaTest
public class ApplicationTests {

    @Test
    public void contextLoads() {
    }

}

我也试过@AutoConfigureTestDatabase而不是@DataJpaTest,但没有成功。

为了让集成测试加载orm.xml,我应该改变什么?

【问题讨论】:

标签: spring jpa spring-boot spring-boot-test


【解决方案1】:

我不得不将一些使用内存数据库的集成测试迁移到 SpringBoot2,为了能够访问测试中的“orm.xml”文件,我刚刚从“src/main/resources/META- INF/orm.xml”到“src/test/resources/META-INF/orm.xml”。

【讨论】:

    【解决方案2】:

    我使用的是带有 junit 的 spring(不是 spring boot),我曾经像这样注释测试类:

    @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "appContextTest.xml" })

    在 appContextTest.xml 里面,我有导入:

    <import resource="classpath:config-test.xml" />

    编辑:文件内容如下(它具有数据源定义和休眠属性:

    <bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource">
        <property name="URL" value="jdbc:oracle:thin:@127.0.0.1:1521:serv"/>
        <property name="user" value="us"/>
        <property name="password" value="pass"/>
    </bean>
    .
    
    .
    
    .
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
    
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.bytecode.use_reflection_optimizer">true</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop> 
            </props>
        </property>
    

    ` ...我不知道这是否有帮助

    【讨论】:

    • 我试过这个,但它不起作用,因为 标记导入 XML bean 定义,而 orm.xml 是 JPA 文件,因此与 Spring 无关。
    猜你喜欢
    • 1970-01-01
    • 2020-01-17
    • 2021-08-04
    • 2021-01-16
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    相关资源
    最近更新 更多