SE app的JPA persistence.xml数据源

时间:2012-03-19 17:20:28

标签: java jpa

各种来源(例如Oracle)表示您必须在persistence.xml中为通过<property name="javax.persistence.jdbc.url" value="..."/>之类的内容使用JPA的Java SE应用程序指定jdbc连接详细信息。

当您想要针对不同的数据库运行应用程序时,这是一个真正的痛苦,例如本地,测试和生产。我目前通过拥有多个持久性单元来实现这一目标,这些单元实际上是相同但具有不同的连接细节,然后让应用程序根据其运行的环境选择正确的持久性单元。

问题是:

  • 重复配置。当我添加一个Entity类时,我必须为每个持久性单元添加<class>MyClass</class>。我宁愿只指定一次。
  • 与应用程序一起打包的数据库连接配置。如果我想更改环境中使用的数据库,我需要使用persistence.xml并重新构建应用程序。我宁愿在每个环境中都有一个配置文件来指定数据库凭据。这样,我可以拥有许多环境,但只定义了一个持久性单元,我可以通过在该环境中编辑一个文件然后重新启动应用程序来更改给定环境的数据库凭据。

您知道配置持久性的更好方法吗?有没有办法让<jta-data-source><non-jta-data-source>在Java SE环境中做适当的事情?

1 个答案:

答案 0 :(得分:1)

你可以在代码中手动配置

Map<String, String> props = new HashMap<String, String>();
props.put("javax.persistence.jdbc.url", "YourURL");
EntityManagerFactory emf = Persistence.createEntityManagerFactory("UnitName", props);
EntityManager em = emf.createEntityManager();