如何在运行时创建JPA持久性单元

时间:2012-02-21 10:22:49

标签: java hibernate jpa persistence persistence.xml

是否可以在运行时动态创建一个jpa持久性单元,而不是在persistance.xml中定义它?

我有一个用例,我为不同的客户使用一个应用程序的实例,对于每个客户,我设置了一个新的数据库,我需要设置一个新的客户,以便重新部署应用程序,这就是为什么我nead在运行时而不是在persistence.xml中设置持久性单元

我使用seam2,jsf1.2,hibernate3

有关此的任何提示吗?

2 个答案:

答案 0 :(得分:1)

不属于JPA规范。一些JPA实现允许一种方式,例如我们允许在DataNucleus JPA中看到此文档的末尾http://www.datanucleus.org/products/accessplatform_3_0/jpa/persistence_unit.html 请参阅JPA提供商的文档以了解它是否

答案 1 :(得分:1)

似乎你知道在部署之前要使用哪个persistence unit。如果是这种情况,那么你并不是真的在运行时创建PU。我认为你有两个选择。

  1. 您可以使用${PUNAME}使用占位符,然后在属性文件中根据您的客户端设置它。如果您使用maven,您可以使用maven配置文件在开发和包装过程中填充这些属性。
  2. 使用某种基于区域设置的系统对每个客户端都有不同的persistence unit,例如persistenceunit_cient1.xmlpersistenceunit_cient2.xml让系统根据客户端区域设置选择一个。是的,您必须调整Locale设置。

  3. 好的......只是澄清了我的理解。您有一个运行应用程序,其中一些客户端可以来注册,一旦注册,他们将拥有自己的数据库。我已经让我的想象力在这里疯狂了:)但似乎是这样。你可以做的是更改\更新属性文件与连接URL,密码等和relaod会话工厂。

    此问题可以帮助您在运行时更新属性文件java update properties file run time

    此问题herehere有关于如何在运行时重新加载会话工厂的信息。