【问题标题】:hibernate changing cfg properties at runtimehibernate 在运行时更改 cfg 属性
【发布时间】:2011-09-20 04:44:48
【问题描述】:

我正在尝试在运行时更改 cfg 属性。 例如:

cfg.setProperty("hibernate.connection.url")

问题是它只有在cfg文件本身没有定义这个属性时才起作用, 意思是,它不会覆盖。

可以通过某种方式完成吗?

【问题讨论】:

  • 我的猜测是您正在设置此属性,该属性被配置文件覆盖,休眠代码中没有任何其他建议。你能验证一下吗?
  • 我检查了休眠代码。 Configuration 类有一个 Properties 类型的成员。当我们调用configure时,这个成员被初始化。如果我们调用 setProperty,我们设置的属性将被覆盖。我的错误是我先调用了 setProperty,然后调用了 configure()。

标签: java hibernate


【解决方案1】:

当你跑步时

Configuration cfg = new Configuration().configure();

.configure() 从 XML 中读取数据,其优先级高于编程配置。

但是,如果您删除 .configure,所有配置都将从您将传递的设置中“读取”。例如:

       Configuration configuration = new Configuration()
       .setProperty( "hibernate.connection.driver_class", "org.postgresql.Driver" )
       .setProperty( "hibernate.dialect","org.hibernate.dialect.PostgreSQLDialect")
       [...snip...]
       .addAnnotatedClass( com.myPackage.MyClass.class )
       [...] ;

将在运行时设置所有属性。

【讨论】:

  • 不完全。我的问题是我在使用 setProperty 后调用了 cfg.configure(configFile)。如果我先配置,然后调用 setProperty,它会采用我设置的属性。
  • 我在一行中遇到了 .configure().setProperty() 的一些问题。为什么我决定完全从硬编码信息中抽象出来。
  • 当输入.configure().setProperty() 时,.configure() 的优先级高于.setProperty,所以我并不总是有想要的行为。我相信如果分开的话,它应该可以正常工作。
猜你喜欢
  • 1970-01-01
  • 2018-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多