2009-01-17 129 views
27

我专门找了JPA代码生成技术JPA的Java代码生成

首先,什么是所有的项目可能产生的JPA兼容的代码? (例如HibernateTools)

其次,我还想定制代码生成实用程序,因为它必须符合我们的企业标准。

如果不是,那么所有可用框架可用于使用反射生成Java代码?所以我可以从头开始写。

注意:我使用eclipse生成JPA代码并重复重构以使其符合规范。

回答

22

我也有认识问题的困难,但我会尝试重组:

  • 你有很多的DB数据,并希望通过JPA访问它
  • 你不想手动编写的类访问不同的数据库/表
  • 目前,所有/大部分的模型类是在Eclipse中产生
  • 这些模型有JPA注解
  • 模型类(或ANNOT )不符合企业标准

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

现在你有两个问题:

  1. 可以推荐什么码产生器产生JPA注解的类?
  2. 是否可以自定义这些框架的输出,以及以何种方式?

要回答第一个问题:

我真的很喜欢Netbeans代码生成,特别是如果你将结果展示给不熟悉JPA的人。

在自定义级别,我只能分享我与Hibernate Tools的经验。尤其对于可重现的结果,请尝试使用ant-based tasks。您可以轻松一些目标添加到您的构建和代码生成可以在两个层次进行:

有了模板,你应该能够覆盖大部分企业标准。查看hibernate-tools软件包的pojo目录。定制代码生成的最简单方法是复制和调整模板,并将它们放在用于创建pojos的ant任务中的hibernate-tools.jar之前。

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

  • 尝试在不同文件夹中分隔生成的和自定义的源文件。
  • 考虑使用@MappedSuperclass作为您可能需要手动调整的类。
-4

好吧,基本上你有东西错了方法:JPA is the generation tool

我这样说是因为唯一可以生成JPA实体的东西是SQL,而JPA的重点是以相反的方式做事。你首先定义你的对象模型,然后你可以生成你的表和查询。

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

JPA实体定义 - 特别是与注释一起完成 - 并不是完全麻烦。作为第一件事,他们确实是你最好的选择,而不是成为别的东西的产物。

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

这只是不正确的路要走。

+0

这个答案downvoted因为接近从两边的问题是可以接受的,各有权衡 – IcedDante 2017-04-03 21:32:08

0

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

1

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

参见:

在休眠论坛一个家伙似乎使用与Hibernate工具一traditionnal代码生成方法: https://forum.hibernate.org/viewtopic.php?f=9&t=962223&p=2315766&hilit=named+queries+generate#p2315766

我与克莱同意关于你不能生成所有命名查询的问题,但是我想我们可以想象基于对象的一个​​或几个字段生成基本的命名查询,例如查找器。

3

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

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

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

5

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

一种Eclipse插件从现有的数据库( “数据库firts” 方法)与定制模板工作。该解决方案比大理得益于其轻量化模型和Velocity模板(GitHub上共享)

请访问网站更加灵活:http://www.telosys.org/

Eclipse的市场插件:http://marketplace.eclipse.org/content/telosys-tools

的简要说明原理:http://labs.sogeti.com/code-generation-can-it-be-simple-and-pragmatic/

对于JPA代,使用JPA模板可以在GitHub上:https://github.com/telosys-templates-v3

+1

为Telosys模板的新网址是:https://github.com/telosys-tools/ JPA的软件包是“persistence-jpa-TTversion” – lgu 2015-06-16 15:52:16

+0

如果它适用于我,它会试用它..因为我是JPA的新手。 – 2016-03-15 18:07:41

2

Minuteproject是一个生成器工具,可以生成JPA1/JPA2以及休眠类似ORM的工件。 它基于数据库的反向工程。 您可以指示生成器为您的java代码应用不遵循数据库约定的约定,但映射将是正确的。 (示例条带数据库名称前缀;以ADMIN_开头的表(例如ADMIN_ENVIRONMENT)是java类的Environment(w/out Admin)) 目前20+ conventions可帮助您重塑您的模型以减少更多Java的数据库外观-OO友好。

另一个有趣的特点是updatable-code从而能够同时修改生成的代码和模型 AHT下一代您的修改将被保存!发生器进行合并。

这些模板是开源的并且运行速度很快很容易为您的框架添加一个特定的轨道(例如与您的组织相关的安全方面)。您可以将模板范围扩展到字段级别,实体(表或视图),包(实体组),模型,提供灵活性的应用程序,并且由于轨道的模板通过元数据相互认识,因此从其他角度很容易引用模板并通过配置将它们与命名约定相关联。

0

jpa代码反向生成的理想工具/ eclipse插件是Hibernate Tools。这已经成为JBoss Tools的一部分。所以,在你的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项目,也为安装JBoss eclipse安装中的工具都是JPA POJO实体反向代码生成的先决条件。