以编程方式将实体 Class 包含在持久性单元中?

Including an Entity Class programmatically with a persistence unit?

我正在查看我之前创建的一些代码,发现了一些奇怪的东西。

由于需要用户输入关于要读取的数据库的位置,我正在以编程方式创建持久性单元。

我的代码如下

 Map properties = new HashMap();



            db = plan.db;


            // Configure the internal EclipseLink connection pool
            properties.put(TRANSACTION_TYPE, PersistenceUnitTransactionType.RESOURCE_LOCAL.name());
            properties.put(JDBC_DRIVER, "net.ucanaccess.jdbc.UcanaccessDriver");
            properties.put(JDBC_URL, "jdbc:ucanaccess://" + db + ";singleconnection=‌​true;memory=true");
            properties.put(JDBC_USER, "");
            properties.put(JDBC_PASSWORD, "");
          //  properties.put( "provider" , "org.eclipse.persistence.jpa.PersistenceProvider");

           EntityManagerFactory emf2;
            EntityManager em2;

            emf2 = Persistence.createEntityManagerFactory("PU", properties);
            em2 = emf2.createEntityManager();    

有了这个,我可以多次创建连接。

我注意到的问题是我的 "Persistence.xml"

中也有代码
 <persistence-unit name="PU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>db.Items</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
  <property name="javax.persistence.jdbc.url" value=""/>
  <property name="javax.persistence.jdbc.user" value=""/>
  <property name="javax.persistence.jdbc.driver" value="net.ucanaccess.jdbc.UcanaccessDriver"/>
  <property name="javax.persistence.jdbc.password" value=""/>
</properties>

现在我注意到我找不到任何方法来向这个 "Persistence Unit," 添加 "Entity Class" 但是我能够 运行 我的代码很好,就像这样。

我很好奇它是否只是覆盖了同名持久性单元中的旧属性等?它仍然使用 "db.Items."

的 Persistence Class

我只是想确保这是正确的方法。

我正在修改我的代码,所以我目前无法 运行 看看如果我删除我 PErsistence.xml 中的所有内容会发生什么,但我对此很好奇。

我还注意到 "provider" 属性 被注释掉了。我需要张贴吗? (它包含在 xml 文件中)。

还有一个我看到的例子提到 "Server target" 被设置为 "no" 什么的?对此有何评论?

谢谢大家

它会覆盖您在 persistence.xml 中指定的属性。例如,您可以仅以这种方式设置用户名和密码,其他属性将按照文件中的定义使用。如果是"right"这样做我不知道,但我也这样做过。

Persistence.createEntityManager(unit, props) 的调用开始于在类路径中找到的任何 persistence.xml 中搜索命名的 unit。然后将 props 中的属性添加或覆盖到从该单元的文件中读取的属性。

你的其他问题我不予评论