Eclipse 如何在服务器启动时从JPA中的实体类创建表?
我应该在服务器启动时检查表是否存在。如果它们不存在,我必须使用实体类创建它们。这可能吗? 我使用的是Eclipse,我的服务器是wildfly10。我正在连接到Oracle 11g xe,但我不认为是数据库造成了问题 无论如何,这就是我到目前为止所做的 My persistence.xml: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.
<?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,因为我不想删除任何已经存在的数据