通过EntityManager实例设置jdbc url属性重新打开连接

时间:2017-03-14 09:15:37

标签: java jpa jdbc eclipselink

这是我的EntitymanagerFactory:

Map<String, Object> properties = new HashMap<>();
properties.put("provider", org.eclipse.persistence.jpa.PersistenceProvider.class);
properties.put("eclipselink.cache.shared.default", "false");
properties.put("javax.persistence.jdbc.url", "jdbc:mysql://localhost:3306/na");
properties.put("javax.persistence.jdbc.user", "UserName");
properties.put("javax.persistence.jdbc.password", "Password");
EntityManagerFactory emfForJPAContainer = Persistence.createEntityManagerFactory("persistenceUnit"R, properties);
EntityManager em = emfForJPAContainer.createEntityManager();
em.setProperty("eclipselink.tenant-id","na");

现在,以下代码将userAccount保存为架构“na”:

em.getTransection().begin();
UserAccount ua = new UserAccount(userName, pass);
em.persist(ua);
em.getTransection().commit();

现在,以下内容将使用相同的EntityManager将用户帐户保存到架构“na_1”:

em.setProperty("javax.persistence.jdbc.url", "jdbc:mysql://localhost:3306/na_1");
em.getTransection().begin();
UserAccount ua = new UserAccount(userName, pass);
em.persist(ua);
em.getTransection().commit();

现在,当我在运行时中设置jdbc url时:

 em.setProperty("javax.persistence.jdbc.url", "jdbc:mysql://localhost:3306/na_1");

是否使用na_1架构重新连接数据库? 它有效吗?或者它对性能有任何不良影响?

顺便说一句,我正在使用EclipseLink 2.6.1。

已编辑:这是我的persistence.xml文件:

<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>Here goes all class path</class>
</persistence-unit>

1 个答案:

答案 0 :(得分:0)

首先,您再次设置具有相同值的相同属性,因此它没有任何区别。 除此之外,如果您设置属性运行时而不是执行&#34; em.getTransection()。begin();&#34;而不是它将使用新属性,但如果在设置属性运行时后执行代码: em.setProperty(&#34; javax.persistence.jdbc.url&#34;,&#34; jdbc:mysql:// localhost:3306 / na_1&#34;); em.getTransection()开头();

它会覆盖运行时属性。