JPA java代码生成

Posted

技术标签:

【中文标题】JPA java代码生成【英文标题】:JPA java code generation 【发布时间】:2010-10-01 22:40:06 【问题描述】:

我专门找JPA代码生成技术

首先,有哪些项目可以生成符合 JPA 的代码? (例如 HibernateTools)

其次,我还想自定义代码生成实用程序,因为它必须符合我们的公司标准。

如果没有,有哪些框架可用于使用反射生成 java 代码?所以我可以从头开始写。

注意:我使用 eclipse 生成 JPA 代码并反复重构以使其兼容。

【问题讨论】:

【参考方案1】:

我也很难理解这个问题,但我会尝试改写:

您在数据库中有大量数据并希望通过 JPA 访问它 您不想手动编写类来访问不同的数据库/表 目前所有/大部分模型类都是从 Eclipse 中生成的 这些模型具有 JPA 注释 模型类(或注释)不符合公司标准

当您说“JPA java 代码生成”时,我理解从提供的 DB 连接生成 JPA 注释模型类。大多数框架通常将此称为逆向工程。

现在你有两个问题:

    可以推荐哪些代码生成器来生成 JPA 注释类? 是否可以自定义这些框架的输出,以何种方式?

回答第一个问题:

Hibernate Tools - 问题中已经提到过,但我更喜欢这个 EclipseLink Netbeans

我真的很喜欢 Netbeans 代码生成,尤其是当您向不熟悉 JPA 的人展示结果时。

在自定义级别上,我只能分享我使用 Hibernate Tools 的经验。特别是对于可重现的结果,请尝试使用ant-based tasks。您可以轻松地将一些目标添加到您的构建中,并且可以在两个级别上完成代码生成:

使用properties 配置导出器 提供自定义freemarker templates

使用这些模板,您应该能够涵盖大多数公司标准。查看 hibernate-tools 包的pojo 目录。自定义代码生成的最简单方法是复制和调整模板,并将它们放在用于创建 pojo 的 ant 任务中的 hibernate-tools.jar 之前。

正如在另一条评论中已经指出的那样,之后可能很难修改生成的代码。我希望以下提示可以帮助您:

尝试将生成的和自定义的源文件分开放在不同的文件夹中。 考虑将@987654327@ 用于您可能希望手动调整的类。

【讨论】:

【参考方案2】:

另一种有效的 JPA 代码生成解决方案是“Telosys 工具

Eclipse 插件使用现有数据库(“数据库优先”方法)和可定制模板。由于其轻量级模型和 Velocity 模板(在 GitHub 上共享),此解决方案比 Dali 更灵活

查看网址:http://www.telosys.org/

Eclipse Marketplace 上的插件:http://marketplace.eclipse.org/content/telosys-tools

原理简述:http://labs.sogeti.com/code-generation-can-it-be-simple-and-pragmatic/

对于 JPA 生成,请使用 GitHub 上提供的 JPA 模板:https://github.com/telosys-templates-v3

【讨论】:

Telosys 模板的新 URL 是:github.com/telosys-tools JPA 的捆绑包是“persistence-jpa-TTversion” 如果它适合我​​,我会试试的。因为我是 JPA 的新手。【参考方案3】:

我用过Dali Persistence Eclipse Plugin,该工具可以通过Indigo Java EE SR1 update site下载。

安装插件后,要对您的数据库进行逆向工程,您需要创建一个新的 JPA 项目,设置数据库连接,启动 JPA 运行时的自动下载(在我的情况下为 Eclipse Link),然后开始生成过程。

在代码生成过程中,系统会要求您提供有关表映射和生成的类的详细信息。在生成结束时,代码是干净的。

【讨论】:

【参考方案4】:

Minuteproject 是一个生成器工具,可以生成 JPA1/JPA2 以及类似休眠 ORM 的工件。 它基于数据库的逆向工程。 您可以指示生成器为您的 Java 代码应用不遵循 DB 约定的约定,但映射将是正确的。 (示例带数据库名称前缀;以 ADMIN_ 开头的表,例如 ADMIN_ENVIRONMENT 是环境(无管理员)作为 java 类) 目前,20+ conventions 可以帮助您通过更适合 Java-OO 来重塑模型以减少 DB 外观。

另一个有趣的功能是updatable-code 允许修改生成的代码和您的模型AND aht 下一代您的修改将被保留!生成器进行合并.

这些模板是开源的,并且可以与速度一起工作,附加一个轨道来为您的框架制作特定的轨道是“非常”容易的(例如与您的组织相关的安全方面)。您可以将模板范围限定为字段级别、实体(表或视图)、包(实体组)、模型、提供灵活性的应用程序,并且由于轨道的模板通过元数据相互了解,因此很容易从其他模板中引用模板并通过配置将它们与命名约定相关联。

【讨论】:

【参考方案5】:

Project lombok 似乎允许您生成基本的命名查询,这是在编译时使用注释和代码生成的另一种方法。

见:

http://groups.google.com/group/project-lombok/browse_thread/thread/a8c01b2226c081cb http://projectlombok.org

hibernate 论坛上的一个人似乎使用传统的代码生成方法和 Hibernate 工具: https://forum.hibernate.org/viewtopic.php?f=9&t=962223&p=2315766&hilit=named+queries+generate#p2315766

我同意 cletus 的观点,即您无法生成所有命名查询,但我想我们可以想象生成基本的命名查询,例如基于对象的一个​​或多个字段的查找器。

【讨论】:

【参考方案6】:

查看JPM2java,它是 JPA 的代码生成器。唯一的问题是它不会从 SQL 文件或表中生成 JPA 代码,您需要一个 orm.xml 文件。如果您正在寻找直接从表生成代码的工具,您可能想尝试 Netbeans。它具有直接从表中生成 JPA 代码的选项

【讨论】:

【参考方案7】:

jpa 代码反向生成的理想工具/eclipse 插件是 Hibernate Tools。这现在已成为 JBoss 工具的一部分。所以,在你的 Eclipse 中开始安装 JBoss Tools。

然后创建一个 JPA 项目。该项目将充当与反向生成项目相关的所有代码/配置的持有者。首先安装 JBoss 工具可以让您的 Hibernate 配置(Hibernate 工具的一部分)与您的 JPA 项目一起创建。

下一步是使用 Hibernate 工具实际反向生成与您的数据库表相对应的 JPA POJO 实体。

想要详细了解JPA POJO反向生成的步骤可以看下面的教程...http://www.javabrahman.com/j2ee/how-to-do-reverse-code-generation-of-hibernatejpa-pojo-entities-using-jboss-tools-eclipse-plugin/

上述教程还包含创建 JPA 项目以及在 Eclipse 安装中安装 JBoss 工具的教程链接,这两者都是 JPA POJO 实体反向代码生成的先决条件。

【讨论】:

【参考方案8】:

用于生成 JPA 类、可视化和修改数据库、对现有源代码进行逆向工程以及从现有数据库导入模型的开源图形工具。

对于 NetBeans:http://jpamodeler.github.io/ 对于 Eclipse:https://www.eclipse.org/webtools/dali/

【讨论】:

【参考方案9】:

请查看 JOOQ。

http://www.jooq.org/

开源可用.....

【讨论】:

什么样的例子?你能在这里复制一个吗?【参考方案10】:

好的,基本上你的方法不对:JPA is the generation tool

我这样说是因为您唯一可以从中生成 JPA 实体的是 SQL,而 JPA 的全部意义在于以相反的方式做事。您首先定义您的对象模型,然后您可以生成您的表和查询。

例如,我见过一些项目使用 Hibernate 来定义他们的实体,然后他们有一个 ant 构建脚本,可以从 Hibernate 实体模型创建数据库。

JPA 实体定义——尤其是使用注释完成的——并不十分繁琐。它们确实是您首先要做的最好选择,而不是成为其他事物的产物。

此外,另一个工具不会帮助您编写命名查询、定义正确的关系级联选项等。如果您生成了代码,之后您将如何处理修改它?

这不是正确的方法。

【讨论】:

这个答案被否决了,因为从任何一方解决问题都是可以接受的,并且都有权衡

以上是关于JPA java代码生成的主要内容,如果未能解决你的问题,请参考以下文章

如何使用嵌入的 JPA 和 JavaDB 从 Java 代码创建数据库表?

如何在JPA / JAVA / Hibernate的两列中插入自动生成的ID

如何设置在 Java JPA/Hibernate 中不是自动生成的 @Id 主键?

JPA中的实体序列生成器

JPA @EmbeddedId 未生成序列

在运行时从 db 枚举为 jpa 枚举生成值