【问题标题】:Hibernate: overriding xml config file with another fileHibernate:用另一个文件覆盖 xml 配置文件
【发布时间】:2011-05-24 21:48:30
【问题描述】:

我有一个由源代码和测试类组成的源代码树。当我运行测试时,我想使用<property name="hbm2ddl.auto">create</property> 而在运行代码时我想使用validate 值而不是创建。 我想使用两个配置文件,一个具有所有属性并包含 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");

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

【问题讨论】:

    标签: java unit-testing hibernate


    【解决方案1】:

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

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

    hbm.xml 文件不允许像我尝试的那样用 addResource(...) 覆盖值,这些值只被添加而不被覆盖

    【讨论】:

    • 我正在尝试使用 org.hibernate.cfg.Configuration.addURL(urlForXmlWithOverrides) 覆盖 connection.url,并获得相同的结果:连接 URL 未被覆盖。但是,我发现当没有原始值时它也不起作用,即传递给 configure(URL) 方法的文件根本不包含该属性。因此,我不确定是否会添加值。无论如何,我会使用你的方法——它不是特别优雅,但至少它有效。 :-) 谢谢。
    • 我通过使用属性名称“hibernate.connection.url”解决了我的问题。我没有使用setProperty,而是从流中读取属性并使用Configuration.addProperties(Properties),但这基本上与您正在做的事情相同。无论如何,addProperties 似乎与其他“添加”方法不同,因为它们添加了 properties 而不是 mappings。我还没有发现这种区别是什么。如果我这样做了,我会发布答案。
    【解决方案2】:

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

            Properties props = new Properties();
            props.load(new FileInputStream(propFile));
            configuration = new Configuration().setProperties(props);
    

    试试看这是否适合你。

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

    【讨论】:

    • 抱歉延迟回复:您的方法允许加载不同的属性文件,但我想加载一个“基本”属性文件和一个额外的属性文件,这会覆盖一些属性。解决了,我要写了
    猜你喜欢
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 2018-11-29
    相关资源
    最近更新 更多