【问题标题】:How to create H2 table before adding records in JPA如何在 JPA 中添加记录之前创建 H2 表
【发布时间】:2014-09-11 05:58:41
【问题描述】:

我的项目涉及 JPA 并在我的 persistence.xml 文件中关注

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <persistence-unit name="rest-jpa">
        <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
        <jta-data-source>java:/comp/env/jdbc/restDB</jta-data-source>
        <class>org.wso2.as.ee.Student</class>
        <properties>
            <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
        </properties>
    </persistence-unit>
</persistence>

我的 H2 数据库是内存数据库。

当我在添加记录之前尝试查找记录时,它会给出未找到表的错误。我认为只有在向数据库添加记录时才会创建表。如何在添加任何记录之前创建表?

【问题讨论】:

    标签: jpa h2 openjpa persistence.xml


    【解决方案1】:

    您可以使用以下 JPA 属性:

    每次运行应用程序时都会生成并执行 DROP TABLECREATE TABLE 脚本:

    • javax.persistence.schema-generation.database.action=drop-and-create

    创建数据库后加载一些预定义的数据:

    • javax.persistence.sql-load-script-source="META-INF/loadData.ddl"

    创建模式应该延迟到使用实体之前(至少在使用 JPA 的情况下),因此您可以使用保证这种行为的 JPA 属性。如果您仍然发现此行为发生,您应该在您的 JPA 提供程序 bugtracker 上制作错误票。

    【讨论】:

    • 我正在使用 OpenJPA,它目前支持 JPA 2.0 规范。此属性来自 JPA 2.1。
    • @callkalpa 对于任何 JPA 2.1 之前的实现,您应该使用供应商特定的属性。对于OpenJPA,您可以查看此网址:openjpa.apache.org/builds/2.2.0/apache-openjpa/docs/…。请注意,还提到了属性openjpa.jdbc.SynchronizeMappings 何时完成其工作:OpenJPA will run the mapping tool on these classes when your application obtains its first EntityManager.。没有其他方法可以自动执行此操作(除非您使用 java org.apache.openjpa.jdbc.meta.MappingTool - 文档中也提到了这一点。)。
    猜你喜欢
    • 2019-06-12
    • 2021-04-04
    • 2017-03-20
    • 2021-03-05
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    相关资源
    最近更新 更多