将JDBC与persistence.xml一起使用

时间:2010-05-02 10:05:22

标签: java orm jpa jdbc

我正在构建一个管理数据库访问的框架。

框架从用户获取任务并处理管理对数据库的访问的连接池。用户只需向我发送SQL命令。

我想支持的一个功能是使用JPA,在这种情况下,我将提供实体管理器。在某些情况下,我想提供JDBC访问以及JPA访问。数据库的参数是用XML文件编写的。

因此对于JPA,我需要在persistence.xml中编写属性,因此再次为JDBC创建相同的参数并不是那么聪明。你知道我是否可以从persistence.xml获取数据库的参数,你知道是否有源代码可以做到这一点。或者我应该自己解析persistence.xml?

1 个答案:

答案 0 :(得分:3)

  

您知道我是否可以从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);