JPA:创建数据库然后连接



我想在应用程序部署过程的第一次创建数据库。我正在使用JPA。所以我考虑两种方法。

1)我有一个完整的连接描述在我的persistence.xml:

<property name="mysql.jdbc.user" value="root"/>
<property name="mysql.jdbc.password" value=""/>
<property name="mysql.jdbc.url" value="jdbc:mysql://localhost:3306/DB"/>
<property name="mysql.jdbc.driver" value="com.mysql.jdbc.Driver"/>

当应用程序启动时,它无法连接到DB,并报告此问题,建议转到安装页面。在这个安装页面中,我使用显式的SQL查询启动一个DB创建。

2)我有一个连接到数据库服务器:
<property name="mysql.jdbc.user" value="root"/>
<property name="mysql.jdbc.password" value=""/>
<property name="mysql.jdbc.url" value="jdbc:mysql://localhost:3306/"/>
<property name="mysql.jdbc.driver" value="com.mysql.jdbc.Driver"/>

应用程序通知我这是第一个连接,并将我重定向到安装页面。在DB安装期间,应该修改persistence.xml。属性mysql.jdbc.url必须更改为声明数据库名称的新值赋值。

你觉得这个怎么样?如何做到这一点?

我几乎可以肯定你不能使用JPA来创建数据库本身。

您需要手动创建它,或者使用像Maven这样的构建工具创建它。

也许您应该使用persistence.xml创建数据库。例如,对于JBoss,该属性如下所示:

<property name="hibernate.hbm2ddl.auto" value="create-drop"/>

您可以做的是添加一个servlet,配置为在应用程序启动时运行(一次)。这个servlet可以检查数据库是否已经存在,如果不存在,则以编程方式创建它。检查这个问题的答案,看看如何在MySQL中实现这一点。如果您有一个正在运行的服务器,您可以获得一个连接并运行SQL来创建数据库。之后,可以使用JPA实现的正确属性(如Hibernate显示的Nulldevice)自动创建必要的表等。

您甚至可以让servlet定位persistence.xml文件,因为它应该在一个特定的位置,并解析它以找出几个属性,如URL,以确保它们只在一个地方定义。

我不确定的是JPA是否只会在servlet运行后尝试连接(并可能创建表),或者如何强制这样做。为此,您可能必须检查JavaEE应用程序的生命周期。

最新更新