Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate:用另一个文件覆盖xml配置文件_Java_Unit Testing_Hibernate - Fatal编程技术网

Java Hibernate:用另一个文件覆盖xml配置文件

Java Hibernate:用另一个文件覆盖xml配置文件,java,unit-testing,hibernate,Java,Unit Testing,Hibernate,我有一个由源类和测试类组成的源代码树。运行测试时,我希望使用create,而运行代码时,我希望使用validate值而不是create。 我想使用两个配置文件,一个包含所有属性并包含hbm2ddl.auto集进行验证,另一个包含hbm2ddl.auto集进行创建。我希望下面的代码能够让我从测试中读取基本文件并覆盖唯一的hbm2ddl.auto属性,但它不起作用(hbm2ddl.auto的值仍然是从hibernate.cfg.xml读取的值) Configuration configuration

我有一个由源类和测试类组成的源代码树。运行测试时,我希望使用
create
,而运行代码时,我希望使用
validate
值而不是create。 我想使用两个配置文件,一个包含所有属性并包含hbm2ddl.auto集进行验证,另一个包含hbm2ddl.auto集进行创建。我希望下面的代码能够让我从测试中读取基本文件并覆盖唯一的hbm2ddl.auto属性,但它不起作用(hbm2ddl.auto的值仍然是从hibernate.cfg.xml读取的值)

Configuration configuration = new Configuration();
configuration = configuration.
    configure("hibernate.cfg.xml").
    addResource("hibernate-test.cfg.xml");

在不复制整个配置文件的情况下,如何为一个属性设置两个不同的值?

我在尝试以编程方式加载另一个配置时遇到了问题。我以前的解决方法是使用另一个hibernate.properties文件(而不是xml config)。您可以在此属性文件中设置备用hibm2ddl值,并使用以下代码加载该值:

        Properties props = new Properties();
        props.load(new FileInputStream(propFile));
        configuration = new Configuration().setProperties(props);
试试看这对你是否有效


Imp:不要调用configuration.configure()。

在我看来,当您只有几个值要覆盖时,一种简单的方法是像往常一样加载xml配置,然后以编程方式调用
setProperty
,如下所示:

Configuration configuration = new Configuration();
configuration = configuration.configure("hibernate.cfg.xml");
configuration.setProperty("hibernate.hbm2ddl.auto", "create-drop");

hbm.xml文件不允许用
addResource(…)
覆盖值正如我试图做的那样,这些值只被添加而没有被覆盖

很抱歉回复延迟:您的方法允许加载不同的属性文件,但我想加载“base”属性文件加上一个附加文件,它将覆盖一些属性。在我编写时已隔离我正在尝试使用
org.hibernate.cfg.Configuration.addURL(urlForXmlWithOverrides)覆盖
connection.url
,并得到相同的结果:连接URL没有被覆盖。但是,我发现当没有原始值时,即传递给
配置(URL)的文件也不起作用
方法根本不包含该属性。因此,我不确定是否添加了值。无论如何,我将使用您的方法它不是特别优雅,但至少可以工作。:-)谢谢。我使用属性名“hibernate.connection.url”解决了我的问题。我从流中读取属性并使用
Configuration.addProperties(properties)
,而不是
setProperty
,但基本上与您所做的相同。在任何情况下,
addProperties
似乎都不同于其他“add”方法,因为它们添加属性而不是映射。我还没有发现这种区别是为了什么;如果我这样做了,我会发布一个答案。