我有一個由源代碼和測試類組成的源代碼樹。當我運行測試時,我想使用<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