【问题标题】:Generate JPA 2 Entities from existing Database从现有数据库生成 JPA 2 实体
【发布时间】:2011-08-15 13:19:46
【问题描述】:

如何从现有数据库生成符合 JPA2 的 @Entity?。

我发现了这个:Question

尚不清楚 JBoss 是否会生成兼容的 JPA2,我也想知道是否有独立于供应商的方式来执行此操作。

【问题讨论】:

    标签: java code-generation persistence entity jpa-2.0


    【解决方案1】:

    您可以使用像 Eclipse Dali 这样的插件来为您解决问题。您可以参考文档,第 3.11 节Generating Entities from Tables

    不过,我不知道有任何特定的供应商独立工具可以做到这一点。

    【讨论】:

    • 我已经检查过 Eclipse Dali,但它似乎只与 JPA1 (EclipseLink 1.1.x) 兼容,并且当我尝试生成表的实体 (seccion 3.11) 列表时,即使选择正确的模式也是空的和当前的数据库驱动程序... :(
    • @Will824 我现在正在使用带有 JPA 2.0 和 Hibernate 3.6 实现的 Eclipse Dali。
    • 你如何设法将Eclipse Dali 与JPA2.0 一起使用?Eclipse 网页中提供的版本只要求1.1.x 库。
    • @will824 你可以试试this
    • Dali 3.3 已作为Eclipse Kepler 版本的一部分发布。
    【解决方案2】:

    尝试使用 OPENJPA 反向映射工具。它们提供了更多的设施并且易于配置。这个例子会澄清。

    如果您使用 maven 作为构建工具,请将此条目添加到您的 pom.xml

        <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2</version>
    <configuration>
    <mainClass>org.apache.openjpa.jdbc.meta.ReverseMappingTool</mainClass>
    <commandlineArgs>
        -directory src/main/java -accessType fields
        -useGenericCollections true -package org.yourproject.model
        -metadata none -annotations true
        -innerIdentityClasses false -useBuiltinIdentityClass false
        -primaryKeyOnJoin false
        </commandlineArgs>
    <includePluginDependencies>true</includePluginDependencies>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.0.CR3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.openjpa</groupId>
            <artifactId>openjpa-all</artifactId>
            <version>2.0.1</version>
        </dependency>
    </dependencies>
        </plugin>
    

    还在资源的 META-INF 文件夹中的 persistence.xml 中添加以下属性。这些将被 openjpa 工具用来建立与数据库的连接。

        <properties>
    <property name="openjpa.ConnectionUserName" value="${db.username}"/>
    <property name="openjpa.ConnectionPassword" value="${db.password}"/>
    <property name="openjpa.ConnectionURL" value="${db.url}"/>  
    <property name="openjpa.ConnectionDriverName"  value="${db.driver.class}"/>     
       </properties>
    

    要生成实体文件,只需在项目目录中启动 maven 目标,使用 mvn org.codehaus.mojo:exec-maven-plugin:java 它将在所需位置生成文件。

    【讨论】:

    • 我还必须使用 &lt;additionalClasspathElements&gt;&lt;additionalClasspathElement&gt;.&lt;/additionalClasspathElement&gt;&lt;/additionalClasspathElements&gt; 添加类路径并将持久性放在 META-INF/persistence.xml 中
    • 要在项目目录中执行它需要做 mvn org.codehaus.mojo:exec-maven-plugin:java
    • @hussian-pithawala 我收到此错误&lt;openjpa-2.4.2-r422266:1777108 fatal user error&gt; org.apache.openjpa.util.UserException: The persistence provider is attempting to use properties in the persistence.xml file to resolve the data source. A Java Database Connectivity (JDBC) driver or data source class name must be specified in the openjpa.ConnectionDriverName or javax.persistence.jdbc.driver property. The following properties are available in the configuration: "org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl@ce8c062f"
    【解决方案3】:

    Telosys 可能是这种代码生成的最简单方法。

    它会生成 JPA 实体(当然),如果您想要一个完全可操作的 Web 应用程序

    见网址:http://www.telosys.org

    【讨论】:

      【解决方案4】:

      你应该看看 minproject on this track reverse-engineering for JPA2。 它是一个独立于供应商的工具。在 0.5.5 版中,它生成:

      • JPA2 实体(用于表和视图)和关联的元模型
      • persistence.xml(0.5.5 中只有休眠配置可用)但您可以覆盖它。
      • maven pom 与 querydsl 集成
      • 枚举类(如果在扩充时指定,即在配置文件中)。

      我没有用 H2 尝试过,但要做到这一点,你需要

      • 在 $MP_HOME/application/lib/extra 中添加 H2 jdbc 驱动程序
      • 在 MinuteProject 配置中添加驱动程序类和您的连接参数。

      【讨论】:

      • Minute Project - 不支持复合键(主键或外键),不完全可配置,添加了一些自己的包。它适用于基本关系和有限数量的表。它的好处是它不仅支持 JPA 还支持大量技术......
      【解决方案5】:

      Netbeans IDE 中有一个选项可以从数据库生成实体。

      【讨论】:

        【解决方案6】:

        Eclipse 提供这个功能已经有一段时间了(起源于 Dali,从 Kepler 版本开始包含)。只需右键单击您的 JPA 项目 -> JPA 工具 -> 从表中生成实体:

        【讨论】:

          【解决方案7】:

          MinuteProject 很棒。我从 Oracle 模式为 JPA2 生成了 Java 类。所有这一切都非常轻松。 按照 minproject 网站上给出的步骤,这里是 url:go here

          【讨论】:

          • 你好。最好也包含代码,而不仅仅是指向可能答案的链接。
          • 这个例子没有代码。仅描述代码生成工具的使用。我们都应该知道什么是 JPA 实体。但如果这是一个包含代码本身的问题,我绝对同意你的看法。
          【解决方案8】:

          “从表中生成实体” 选项是否适用于 H2 数据库?我总是在选择表步骤中发现架构列表为 ,即使我有使用通用 JDBC 驱动程序与 H2 数据库建立有效连接。

          同样的连接在 hibernate-tools 中显示表格。例如,当我在其编辑器中创建逆向工程 xml 时,我可以刷新表格选项卡并查看完整列表。我不知道休眠工具是否相关,因为它可能使用控制台配置。

          【讨论】:

          • 我不记得在 Dali 的连接列表中看到 H2,但是如果你想尝试它,安装 Helios 然后将 Dali 升级到最新版本,他们可能已经包含更多支持,因为你正在描述发生在我身上的 Dali 版本较低。
          • 它显然不适用于当前版本的 openjpa,我在调整 openjpa 源文件后设法让它工作。对于 H2Dictionary.java,他们设置了 supportsNullTableForGetPrimaryKeys=true ,这最终会引发一些错误。我不知道我是否在配置中犯了任何错误,但我相信这是一个错误。无论如何,我要强调的是,生成的 java 类是从 hibernate 工具生成的类的一半。原因是它没有正确命名引用的列。也不生成注释。所以我更喜欢休眠工具
          【解决方案9】:

          如果您是 netbeans 用户,我会在 netbeans 中获得一个出色的插件,http://plugins.netbeans.org/plugin/53057/jpa-modeler

          此视频演示如何使用它https://www.youtube.com/watch?v=TDbZ5EGpvoY

          可以从 NetBeans 的菜单 Tools->Plugins

          安装

          对我来说很好用。

          【讨论】:

            猜你喜欢
            • 2016-01-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-08-04
            • 2021-09-05
            • 1970-01-01
            相关资源
            最近更新 更多