Java JPA:创建数据库,然后连接

Java JPA:创建数据库,然后连接,java,jakarta-ee,jpa,Java,Jakarta Ee,Jpa,我想在应用程序部署过程的第一时间创建数据库。我正在使用JPA。所以我考虑两种方式。< /P> 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:3

我想在应用程序部署过程的第一时间创建数据库。我正在使用JPA。所以我考虑两种方式。< /P> 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来创建数据库本身


您需要手动创建它,或者考虑使用类似的构建工具来创建它。

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


您需要手动创建它,或者考虑使用类似的构建工具来创建它。

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

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

另外,请查找其他可能的值。

可能是您应该使用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应用程序的生命周期。它也可能取决于应用服务器供应商的实现。

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

您甚至可以让servlet定位persistence.xml文件,因为它无论如何都应该位于特定位置,并对其进行解析以找到几个属性,如URL,以确保它们仅在一个位置定义


我不确定的是,JPA是否只会在servlet运行后尝试连接并可能创建表,或者如何强制执行。为此,您可能需要检查JavaEE应用程序的生命周期。这也可能取决于应用服务器供应商的实现。

如果您正在测试,您可以使用H2创建数据库,并在测试用例启动时生成模式。如果您对此感兴趣,请告诉我,我将发布一个更详细的解决方案。如果您正在测试,您可以使用H2创建数据库,并在测试用例启动时生成模式。如果这是您感兴趣的,请告诉我,我将发布一个更详细的解决方案。这是Hibernate特有的属性。如果它在JBoss中工作,那只是因为它使用Hibernate作为JPA实现。它可以在您使用Hibernate的任何时候工作。你的回答是正确的,只是要确保这不是JBoss特有的。你的评论是正确的。我的想法是,框架在persistence.xml中有一个属性,我只是举了一个例子,这是一个特定于Hibernate的属性。如果它在JBoss中工作,那只是因为它使用Hibernate作为JPA实现。它可以在您使用Hibernate的任何时候工作。你的回答是正确的,只是要确保这不是JBoss特有的。你的评论是正确的。我的想法是,框架在persistence.xml中有一个属性,我只是举了一个例子。