你知道我是否可以从persistence.xml 获取数据库的参数,你知道是否有源代码可以做到这一点。还是我自己解析persistence.xml?
我不知道标准 JPA API 中允许检索驱动程序类名称、jdbc url、用户名和密码的任何内容。
第二个问题,这些属性的键在 JPA 1.0 中没有标准化。例如,Hibernate 将使用:
<property name="hibernate.connection.driver_class" value=""/>
<property name="hibernate.connection.url" value=""/>
<property name="hibernate.connection.username" value=""/>
<property name="hibernate.connection.password" value=""/>
虽然 EclipseLink 将使用:
<property name="eclipselink.jdbc.driver" value=""/>
<property name="eclipselink.jdbc.url" value=""/>
<property name="eclipselink.jdbc.user" value=""/>
<property name="eclipselink.jdbc.password" value=""/>
这可能会使解析变得脆弱。
如果这是一个选项,也许您可以使用属性文件来存储提供程序特定的键和值(我建议使用标准化的 JPA 2.0 属性作为键)。例如:
# keys for JPA
javax.persistence.jdbc.driver = hibernate.connection.driver_class
javax.persistence.jdbc.url = hibernate.connection.url
javax.persistence.jdbc.user = hibernate.connection.username
javax.persistence.jdbc.password = hibernate.connection.password
# values common to JPA and JDBC
driver = org.h2.Driver
url = jdbc:h2:mem:test
username = scott
password = tiger
并使用Persistence.createEntityManagerFactory(String, Map) 并传递Map,您将使用文件中的属性来创建EntityManagerFactory:
Map map = new HashMap();
map.put(...);
...
EntityManagerFactory emf = Persistence.createEntityManagerFactory("MyPu", map);