是否可以在JHipster中从现有数据库模型生成实体?

时间:2015-04-24 06:48:10

标签: yeoman spring-roo yeoman-generator jhipster

有没有办法从现有数据库模型生成实体,还是我必须自己创建所有带有yeoman(yo)的实体?

我从Spring Roo项目中听说过这样一种技术。

4 个答案:

答案 0 :(得分:5)

不,你不能,因为jhipster yeoman发生器“只”根据模板+给定的参数/选择来支撑实体。它不会在此步骤中询问数据库等外部来源。

生成器为jpa,angular和liquibase更改日志创建所有文件。最后,liquibase在启动期间使用changelogs创建表,如果它们尚不存在的话。

所以,你可以说jhipster使用“实体优先”而不是“表优先”方法。

虽然这将是一个很好的功能,但我认为它不会被集成到jhipster中,因为现有的数据库是如此不同以至于难以处理每种可能性。主键有不同的选择,不同的数据类型,多对多关系或概括的不同实现等等。 或者你可以在Github上申请一个新功能,也许它会被实现......

但是,要给出一些指示: 我也有同样的情况,我尝试将大约50个表和大量数据迁移到jhipster(这是jhipster 1.6左右)的现有数据库,我还想到了“数据库重构”[1]。但是,我的“解决方案”是使用jhipster创建一个新数据库,然后使用一些sql语句将数据从旧数据库迁移到新数据库。 主要原因:

  • 我有另一个与jhipster预期模型不同的数据库模型(例如我使用了其他主键和引用)
  • 生成没有存储库或角度内容(这是我使用jhipster的主要原因)
  • liquibase更改日志缺失[2]
  • 当您尝试针对现有表生成jhipster实体时,此类特殊重构会在之后导致许多其他更改。与使用jhipster创建新实体相比,这些更改可能更耗时。
  • 这些更改也可能导致功能升级出现问题

是的,roo有这样一种技术用于逆向工程或重构数据库(http://docs.spring.io/spring-roo/reference/html/base-dbre.html)。 AFAIK,它只创建基于JPA的符合roo的实体。因此,它也与jhipster使用的弹簧数据JPA不同(与[1]等其他jpa-refectoring工具一样的问题)

[1]我使用了一个eclipse JPA插件,它可以在另一个基于dropwizard的项目中从现有数据库创建jpa实体类。但是,我没有尝试与Spring / Jhipster结合使用。

[2]可以从现有数据库创建liquibase更改日志:http://www.liquibase.org/documentation/generating_changelogs.html

答案 1 :(得分:4)

Spring Roo包含DBRE插件,这是一个用于自动生成域实体的数据库逆向工程的绝佳工具。

@eplog你错了,DBRE允许你使用 - repository 选项为每个实体创建Spring Data JPA存储库。看看http://docs.spring.io/spring-roo/docs/1.3.1.RELEASE/reference/html/base-dbre.html#d4e1765

Imho,DBRE为您提供的好处是:

  • 您不需要搜索,测试和学习第三方工具,Roo会为您完成。
  • 反向工程是在无法迁移数据库的环境中迁移旧应用程序的强大工具

希望它有所帮助。与Roo一起享受!

答案 2 :(得分:4)

请检查此助手

https://www.npmjs.com/package/generator-jhipster-db-helper

根据该助手的描述“此JHipster模块使在现有数据库上的映射更加容易。”

您也可以使用此工具:

https://github.com/Blackdread/sql-to-jdl

它将把您的sql文件转换为idl文件,然后您可以使用jHipster import-idl功能来导入数据库。

这将帮助您加快使用现有数据库生成时髦应用程序的过程

答案 3 :(得分:0)

可以!

查看此堆栈溢出答案:

How to modify existing entity generated with jhipster?

然后,请观看此视频,以使用Eclipse和JBoss工具从现有模式中自动生成JPA注释的域对象。

创建Hibernate配置文件后,可以打开“代码生成工具”,在“导出器”选项卡上,确保选中“使用Java 5语法”和“ EJB3”注释的复选框。

https://www.youtube.com/watch?v=KO_IdJbSJkI

此外,请确保您的休眠jar与您的配置具有相同的数字,在我的情况下,我正在执行Hibernate Spatial,并且版本与Hibernate-Core不匹配,并且一分钟内无法正常工作。