假设我有以下persistence.xml,其中连接url、用户和密码都是硬编码的。
以下是针对 Hibernate 3.2 的。对于 Hibernate 3.5 ++,我们必须将“hibernate.connection”更改为“javax.persistence”。但是让我问这个问题,不管文字“hibernate.connection”还是“javax.persistence”。
<persistence-unit name="obamacare" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.archive.autodetection" value="class, hbm"/>
<property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/>
<property name="hibernate.connection.url" value="blah blah blah"/>
<property name="hibernate.connection.username" value="careuser"/>
<property name="hibernate.connection.password" value="carepass"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/>
<property name="hibernate.show_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
但是,我们需要动态设置 url、用户和密码。有一个提议的身份验证服务器,它提供 url、用户和密码。这样我们就不需要单独配置无数使用某种形式的 jdbc、hibernate 或 JPA 的 webapp。除了不想在可见文本文件上存储/管理密码的安全问题。
就 JPA 而言,如何动态设置这些 JPA 属性?我正在寻求两组答案:
对于独立于 JPA 供应商的解决方案(toplink、eclipselink、hibernate 等)——是否有任何 JPA 功能可以让我动态设置这三个属性?
如果允许我完全依赖 Hibernate,除了可能的 JPA 唯一途径之外,还有没有办法在不涉及 Spring 框架的情况下实现这一点(这似乎是一个到处都是触手的巨大怪物)?
如果您还希望在 JNDI 上投入两美分/英镑/卢比以及如何使用它来替换 persistence.xml 属性的功能,我会很高兴。但是,这不是问题的优先级。