在执行期间动态更改persistence.xml中的内容

时间:2012-10-30 13:29:35

标签: java jpa

出于某种原因,我需要在程序执行期间动态更改persistence.xml的内容(使用JPA),我需要更改主机的地址。这可能吗?
非常感谢

1 个答案:

答案 0 :(得分:8)

您可以使用createEntityManagerFactory(unitName, map)方法更改Persistence Context。 在我的示例中,Persistence Unit Name将是dynamicJPA。

示例:

protected EntityManager getEntityManager(String driver, String url, String username, String password) {
    EntityManager em = null;
    Map properties = new HashMap();
    properties.put("javax.persistence.jdbc.driver", driver);
    properties.put("javax.persistence.jdbc.url", url);
    properties.put("javax.persistence.jdbc.user", username);
    properties.put("javax.persistence.jdbc.password", password);
    try {
        emf = Persistence.createEntityManagerFactory("dynamicJPA", properties);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return em = (EntityManager) emf.createEntityManager();
}

您还可以使用PersistenceUnitMetaData的{​​{1}}。参考Dynamically generated Persistence-Unit