我有一个由源代码和测试类组成的源代码树。当我运行测试时,我想使用<property name="hbm2ddl.auto">create</property>
,而在运行代码时我想使用validate
值而不是创建。 我以为使用两个配置文件,其中一个具有所有属性并包含hbm2ddl.auto设置为验证,另一个设置为创建hbm2ddl.auto。我希望下面的代码允许我从测试中读取基本文件并覆盖唯一的hbm2ddl.auto propery,但它不起作用(hbm2ddl.auto的值仍然是从hibernate.cfg读取的值。 XML。休眠:用另一个文件覆盖xml配置文件
Configuration configuration = new Configuration();
configuration = configuration.
configure("hibernate.cfg.xml").
addResource("hibernate-test.cfg.xml");
我怎么能有两个不同的值的属性,不复制整个配置文件?
我想通过使用'org.hibernate.cfg.Configuration.addURL(urlForXmlWithOverrides)'重写'connection.url',并获得相同的结果:连接URL不是覆盖。不过,我发现当没有原始值时,它也不起作用,即传递给'configure(URL)'方法的文件完全不包含该属性。因此,我不确定这些值甚至会被添加。无论如何,我会使用你的方法 - 它不是特别优雅,但至少它是有效的。 :-) 谢谢。 – 2013-01-17 08:57:45
我改用属性名'hibernate.connection.url'来解决我的问题。我不是使用'setProperty',而是从流中读取属性并使用'Configuration.addProperties(Properties)',但它基本上与你正在做的事情是一样的。 在任何情况下,似乎'addProperties'与其他'add'方法不同,因为它们添加_properties_而不是_mappings_。我还没有发现这个区别是什么。我会发布一个答案,如果我这样做。 – 2013-01-18 02:36:08