休眠:用另一个文件覆盖xml配置文件

问题描述

| 我有一个由源和测试类组成的源树。当我运行测试时,我想使用the0ѭ,而在运行代码时我想使用a1ѭ值而不是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\");
如何在不复制整个配置文件的情况下为属性提供两个不同的值?     

解决方法

在我看来,当您只需要覆盖几个值时,一种简单的方法是照常加载xml配置,然后以编程方式调用
setProperty
,如下所示:
Configuration configuration = new Configuration();
configuration = configuration.configure(\"hibernate.cfg.xml\");
configuration.setProperty(\"hibernate.hbm2ddl.auto\",\"create-drop\");
hbm.xml文件不允许像我尝试的那样用ѭ5覆盖值,这些值仅被添加而不被覆盖     ,我在尝试以编程方式加载另一个配置时遇到了问题。我所使用的解决方法是拥有另一个hibernate.properties文件(而不是xml配置)。您可以在此属性文件中设置备用hibm2ddl值,并使用以下代码加载它:
        Properties props = new Properties();
        props.load(new FileInputStream(propFile));
        configuration = new Configuration().setProperties(props);
尝试看看是否适合您。 提示:请勿调用configuration.configure()。