从现有数据库生成JPA 2实体

39

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

我发现这个问题:Question

尚不清楚JBoss是否会生成符合JPA2的实体,而且我想知道是否有一种与供应商无关的方法来完成此操作。

9个回答

23

您可以使用类似 Eclipse Dali 的插件来完成此操作。您可以参考文档中的第3.11节 从表生成实体

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


1
我已经检查了Eclipse Dali,但它似乎只与JPA1(EclipseLink 1.1.x)兼容,当我尝试生成实体(第3.11节)时,即使选择了正确的模式和当前的DB驱动程序,表格列表也为空... :( - will824
@Will824 我目前正在使用Eclipse Dali与JPA 2.0和Hibernate 3.6实现。 - Edwin Dalorzo
@will824 你安装的是哪个版本的Dali?我安装的是Dali Persistence Tools 2.3.3,从Eclipse更新站点获取的。 - Edwin Dalorzo
1
@will824 你可以尝试使用这个链接:http://download.eclipse.org/webtools/repository/helios - Edwin Dalorzo
1
Dali 3.3已作为Eclipse Kepler版本的一部分发布。 - AzizSM
显示剩余4条评论

17

尝试使用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>

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


我还需要使用<additionalClasspathElements><additionalClasspathElement>.</additionalClasspathElement></additionalClasspathElements>添加类路径,并将持久性放置在META-INF/persistence.xml中。 - Pool
要在项目目录中执行它,您需要运行 mvn org.codehaus.mojo:exec-maven-plugin:java。 - user467257
1
@hussian-pithawala 我遇到了这个错误 <openjpa-2.4.2-r422266:1777108 致命用户错误> org.apache.openjpa.util.UserException: 持久性提供程序正在尝试使用持久性.xml文件中的属性来解析数据源。在 openjpa.ConnectionDriverName 或 javax.persistence.jdbc.driver 属性中必须指定 Java 数据库连接 (JDBC) 驱动程序或数据源类名。以下属性在配置中可用:"org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl@ce8c062f" - Beto Neto

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

4

你应该查看一下 minuteproject,它可以用于JPA2反向工程。

这是一个独立于供应商的工具。在版本 0.5.5 中,它生成:

  • JPA2 实体(用于表和视图)以及相关的元模型
  • persistence.xml(只有 hibernate 配置可用于版本 0.5.5),但你可以覆盖它。
  • 带有 querydsl 集成的 maven pom
  • 枚举类(如果在配置文件中指定了增强)。

我没有尝试过与 H2 一起使用,但需要做以下操作:

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

1
Minute Project - 不支持复合键(主键和外键),不是完全可配置的,会添加一些自己的包。它适用于基本关系和有限数量的表。好处是它支持不仅仅是JPA的一堆技术... - Peter

4
可能是这种代码生成的最简单方式。
它可以生成JPA实体(当然),如果您想要一个完全操作的Web应用程序,
请参阅网站:http://www.telosys.org

3
自从Dali开始,Eclipse现在提供了此功能(自Kepler版本以来已包含)。只需右键单击您的JPA项目-> JPA工具->从表生成实体即可:

菜单项的截图


2

MinuteProject非常棒。我使用它轻松地从Oracle模式生成了JPA2的Java类。按照minuteproject网站上给出的步骤进行操作,这里是网址:点击这里


1
你好。最好包含代码,而不仅仅是可能答案的链接。 - Hanlet Escaño
这个例子没有代码,只是描述了使用代码生成工具的方法。我们都应该知道什么是JPA实体。但如果问题本身包含代码,我完全同意你的看法。 - DtechNet

0

0

"从表生成实体"选项是否适用于H2数据库?即使我使用通用JDBC驱动程序建立了有效的H2数据库连接,但我总是发现在选择表步骤中模式列表为空。

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


我不记得在Dali的连接列表中看到H2,但如果你想尝试它,安装Helios,然后升级Dali到最新版本,他们可能已经增加了更多支持,因为你所描述的情况曾经发生在我使用较低版本的Dali时。 - will824
1
显然,它与当前版本的openjpa不兼容,我在调整openjpa源文件后设法使其正常工作。对于H2Dictionary.java,他们设置了supportsNullTableForGetPrimaryKeys=true,这最终会引发一些错误。我不知道我是否在配置中犯了任何错误,但我相信这是一个bug。无论如何,我想强调的是,生成的Java类只有Hibernate工具生成的一半好。原因是它没有正确命名引用列,也没有生成注释。因此,我更喜欢Hibernate工具。 - samarjit samanta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接