gpt4 book ai didi

java - 将 JDBC 与 persistence.xml 结合使用

转载 作者:行者123 更新时间:2023-11-29 06:21:43 35 4
gpt4 key购买 nike

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

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

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

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

最佳答案

Do you know if I can get the arguments of the database from persistence.xml, do you know if there is a source code that do it. Or should I parse persistence.xml by myself?

我不知道标准 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);

关于java - 将 JDBC 与 persistence.xml 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2753078/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com