Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse 如何在服务器启动时从JPA中的实体类创建表?_Eclipse_Jpa_Jakarta Ee_Wildfly 10 - Fatal编程技术网

Eclipse 如何在服务器启动时从JPA中的实体类创建表?

Eclipse 如何在服务器启动时从JPA中的实体类创建表?,eclipse,jpa,jakarta-ee,wildfly-10,Eclipse,Jpa,Jakarta Ee,Wildfly 10,我应该在服务器启动时检查表是否存在。如果它们不存在,我必须使用实体类创建它们。这可能吗? 我使用的是Eclipse,我的服务器是wildfly10。我正在连接到Oracle 11g xe,但我不认为是数据库造成了问题 无论如何,这就是我到目前为止所做的 My persistence.xml: <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.1" xmlns="http://xmlns.jcp.

我应该在服务器启动时检查表是否存在。如果它们不存在,我必须使用实体类创建它们。这可能吗? 我使用的是Eclipse,我的服务器是wildfly10。我正在连接到Oracle 11g xe,但我不认为是数据库造成了问题

无论如何,这就是我到目前为止所做的

My persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence"                 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="Lab5">
        <properties>
            <property name="javax.persistence.schema-generation.database.action" value="create"/>
        </properties>
    </persistence-unit>
</persistence>

我尝试了在stackoverflow和其他网站上找到的各种警告修复程序,但没有任何帮助。我甚至不知道这是否与我的问题有关

这可能取决于项目中包含的实现。假设使用hibernate进行持久化,则需要添加以下内容:

...
<persistence-unit ...>
  <provider>org.hibernate.ejb.HibernatePersistence</provider>
  ...
  <properties>
    <property name = "hibernate.hbm2ddl.auto" value="create" />
    ...
  </properties>
</persistence-unit>

请注意,这将假定您的连接是由在db中具有创建表所需权限的用户组成的。看看hibernate文档。

这可能取决于项目中包含的实现。假设使用hibernate进行持久化,则需要添加以下内容:

...
<persistence-unit ...>
  <provider>org.hibernate.ejb.HibernatePersistence</provider>
  ...
  <properties>
    <property name = "hibernate.hbm2ddl.auto" value="create" />
    ...
  </properties>
</persistence-unit>

请注意,这将假定您的连接是由在db中具有创建表所需权限的用户组成的。看看hibernate文档。

JPA2.1将DDL生成作为规范的一部分。您可以将javax.persistence.schema-generation.database.action持久性属性与create值一起使用,让2.1提供程序在部署期间为您创建数据库架构。如果需要修改表的创建/分解和填充过程,可以使用JPA生成甚至运行自定义脚本

您可能会遇到的问题是,您的持久化单元没有指定数据源,让容器决定要连接到哪个数据源,而Wildfly必须默认为H2数据库。这些表将在此数据库中设置,但不是您期望的Oracle XE数据库-这就是为什么查询不返回值,而在您的控制台中,这些表甚至不存在


您需要在服务器中为数据库设置一个数据源,然后使用or将持久化单元指向它。您的persistence.xml不完整,因此我建议您首先查看演示持久性单元。

JPA2.1将DDL生成作为规范的一部分。您可以将javax.persistence.schema-generation.database.action持久性属性与create值一起使用,让2.1提供程序在部署期间为您创建数据库架构。如果需要修改表的创建/分解和填充过程,可以使用JPA生成甚至运行自定义脚本

您可能会遇到的问题是,您的持久化单元没有指定数据源,让容器决定要连接到哪个数据源,而Wildfly必须默认为H2数据库。这些表将在此数据库中设置,但不是您期望的Oracle XE数据库-这就是为什么查询不返回值,而在您的控制台中,这些表甚至不存在


您需要在服务器中为数据库设置一个数据源,然后使用or将持久化单元指向它。您的persistence.xml不完整,因此我建议您首先查看演示持久性单元。

我在Wildfly中指定了datasource,在将其添加到标记中后,它现在几乎可以正常工作。您知道如果表已经存在,是否可以避免抛出异常?我不想使用drop和create,因为我不想删除任何数据,如果它已经存在于Wildfly中的指定数据源中,并且在将其添加到标记中之后,它现在几乎按照预期工作。您知道如果表已经存在,是否可以避免抛出异常?我不想使用drop和create,因为我不想删除任何已经存在的数据