使用JPA在Java中嵌入数据库之间切换

时间:2011-07-20 00:03:45

标签: java database jpa persistence

我目前正朝着JPA 2.0迈进,我开始喜欢维护持久数据是多么容易。

我目前要完成的是在基本桌面应用程序中使用JPA。该应用程序应该允许我打开我的文件系统上的嵌入式数据库。我现在选择H2数据库,但我真的可以切换到JavaDB或其他任何东西。

我想要完成的是,可以打开数据库文件,而无需事先在persistence.xml文件中定义持久性单元。 我可以轻松定义一个单元并持久保存对象,但需要先配置它。

我想编写某种数据库浏览器,允许在没有预配置和重新编译的情况下打开。

http://www.objectdb.com/java/jpa/start/connection

我看到ObjectDB允许访问此类PersistenceFactory创建,但我无法将此示例传输到其他数据库。

我对这个问题的处理方式完全错了吗? JPA是不是设计有动态数据库访问?

感谢您的帮助, 约翰内斯

3 个答案:

答案 0 :(得分:2)

不属于JPA标准。某些实现可能会提供自己的API来执行此操作。例如,对于DataNucleus,如果你最后转到这个页面http://www.datanucleus.org/products/accessplatform_3_0/jpa/persistence_unit.html,你可以创建动态持久性单元(以及EMF),这种实现显然允许持久化到你可以获得的最广泛的数据存储

答案 1 :(得分:2)

您可以将属性Map传递给createEntityManagerFactory()调用,该调用定义数据库连接信息等。属性名称与persistence.xml中的属性名称相同。我假设大多数JPA提供者支持这一点,EclipseLink确实支持。

您仍然需要为数据库定义一组类并映射它们。

如果您没有任何课程,那么您可以查看EclipseLink的动态支持,

http://wiki.eclipse.org/EclipseLink/Examples/JPA/Dynamic

答案 2 :(得分:1)

如果要使数据库浏览器访问不同的数据库,则不能使用PU /实体管理器(imo)。

您需要一个对话框询问用户数据库的IP /端口,用户名/密码,要访问的数据库名称以及数据库的类型。

然后,您需要做的就是创建套接字,通过套接字发送请求,并将响应解析为视图。 由于请求和响应都是特定于数据库的,因此用户必须选择正确的数据库驱动程序。