【问题标题】:How to modify existing entity generated with jhipster?如何修改使用 jhipster 生成的现有实体?
【发布时间】:2015-03-28 18:32:54
【问题描述】:

我使用 jhipster 生成器来创建一个项目。我根据jhipster documentation 中提供的信息手动生成了一些实体:

如果您喜欢(或需要)手动更新数据库,以下是开发工作流程:修改您的 JPA 实体(添加一个字段、一个 关系等)在您的 src/main/resources/config/liquibase/changelog 目录。中的文件 该目录以其创建日期为前缀(在 yyyyMMddHHmmss 格式),然后有一个描述他们做什么的标题。例如, 20141006152300_added_price_to_product.xml 是个好名字。添加这个 “更改日志”文件 src/main/resources/config/liquibase/master.xml 文件,所以应用 下次运行应用程序时 如果您想了解更多信息 使用 Liquibase,请转至http://www.liquibase.org

这里的文档刚刚提到,如何添加!!! 如果我想删除一个字段或实体之间的关系(jpa 实体)怎么办?

谢谢

【问题讨论】:

    标签: java hibernate jpa jhipster


    【解决方案1】:

    在同一个页面你可以看到这句话:

    如果您在开发中选择使用 MySQL 或 Postgresql,您可以使用 mvn liquibase:diff 目标自动生成更新日志。

    Liquibase Hibernate 是一个 Maven 插件,在你的 pom.xml 中配置,独立于你的 Spring application.yml 文件,所以如果你改变了默认设置(例如,改变了数据库密码),你需要修改这两个文件。

    这是开发工作流程:

    修改您的 JPA 实体(添加字段、关系等) 编译您的应用程序(这适用于已编译的 Java 代码,所以不要忘记编译!) 运行 mvn liquibase:diff (或 mvn compile liquibase:diff 之前编译) 在您的 src/main/resources/config/liquibase/changelog 目录中创建一个新的“更改日志” 查看此更改日志并将其添加到您的 src/main/resources/config/liquibase/master.xml 文件中,以便下次运行应用程序时应用它 如果您使用 Gradle 而不是 Maven,则可以通过运行 ./gradlew liquibaseDiffChangelog 来使用相同的工作流程,并根据需要更改 liquibase.gradle 中的数据库配置。

    所以您只需要更改您的 JPA 实体(删除、添加等),运行 mvn compile liquibase:diff,然后将更改放入 master.xml。

    【讨论】:

      【解决方案2】:

      1) 编辑代表您的实体的 json 文件(添加/删除字段,语法非常简单,如果需要对“fieldsContainOneToMany”等一般实体属性进行任何更改,请检查文件末尾...),您可以在以下位置找到它:

      <jhipster_root_folder>/.jhipster/entityName.json
      

      2) 构建代码。

      3) 在项目的根目录中运行命令:

      yo jhipster:entity entityName
      

      注意:默认情况下,此命令会覆盖您的所有手动更改。我建议在运行此命令之前在 VCS 存储库上进行提交,以最终恢复任何不需要的更改。

      4) 运行

      mvn liquibase:diff
      

      【讨论】:

      • 只为聪明的note 投赞成票..(早期,经常)
      • 使用 Gradle 时我应该运行什么而不是 mvn liquibase:diff
      • gradle liquibaseDiffChangelog
      • mvn liquibase:diff 做什么以及为什么需要它?我没有运行它,并且得到校验和不匹配的错误。我需要在本地运行它吗?部署时还需要在生产环境中运行吗?
      • Wouter,Liquibase 命令创建一个数据库差异文件到 src/main/resources/config/liquibase 文件夹。使用这些差异文件,您的应用程序可以在找不到时为自己创建一个有效的架构(或在需要时进行架构更新)。开发中只需要liquibaseDiffChangelog命令,在其他环境下,使用这个diff更新schema
      【解决方案3】:

      您也可以以交互方式modify existing entities,例如将yo jhipster:entity Foo 用于实体Foo

      这样,您可以重新生成所有实体和对话框。

      如果您使用的是 RDBMS 和 liquibase,则必须编写更改日志文件并将其添加到 master.xml。这里有帮助的是使用mvn liquibase:diffgradlew liquibaseDiff,您可以针对现有数据库运行它们。不过,我建议手动编写更改日志文件。

      【讨论】:

      • 现在每个人都在使用 Jhipster 3.0(对吗?)这应该是公认的答案
      【解决方案4】:

      我为修改 jhipster 实体(如添加新表的关系)所做的工作是:

      1. (在发生任何事情之前保存项目:p)哟 jhipster:entity TableToEdit 和编辑任何你想要的。Who to editTableOrAdd
      2. 然后添加新表。(可选)
      3. 然后我只需要更改或删除数据库的所有表,以在 SQL 部分自动生成新字段和关系。

      注意:如果在此步骤之后,它有任何错误,serverError 或我重新生成实体regenerate Entity 的东西。当然,如果您想保留所有数据,这不是一个好的选择。

      【讨论】:

        【解决方案5】:

        我的解决方案适用于 jhipster 3.4.2,这是我 1 天的结果,希望对你有帮助:)

        1. 运行yo jhipster:entity entityName
        2. 修改实体(添加,删除,...),最后,jhipster 将提出问题以覆盖文件, *重要提示:为changelog .xml 文件和navbar.html 文件选择否
        3. 返回项目并运行mvn compile liquibase:diff
        4. 运行您的应用程序
        5. 完成

        【讨论】:

        • jhipster 3.9.1 对我也有用。我只需要附加刚刚在更改日志主文件(src/main/config/liquibase/master.xml)中创建的更改日志
        • 当您只想更改数据类型时?
        • @powder366 那么你应该修改 .jdl 文件,从文件中重新生成实体,jhipster 将为你在你的服务中进行相关的更改。
        • 啊,太糟糕了,这不适用于 khipster(kotlin 版本)。我不断收到 NPM 错误..
        • @Rafael 我什至从来没有使用过 khipster,但是如果你遇到 npm 错误,你应该先检查 npm。
        【解决方案6】:

        对于 jhipster 5.7.0,您可以再次运行实体命令,它会询问您是否要修改它。

         % jhipster entity device                                 
        INFO! Using JHipster version installed locally in current project's node_modules
        INFO! Executing jhipster:entity device
        INFO! Options: from-cli: true
        
        Found the .jhipster/Device.json configuration file, entity can be automatically generated!
        
        
        The entity device is being updated.
        
        ? Do you want to update the entity? This will replace the existing files for this entity, all your custom code will be overwritten 
          Yes, re generate the entity 
        ❯ Yes, add more fields and relationships 
          Yes, remove fields and relationships 
          No, exit
        

        【讨论】:

          【解决方案7】:

          您可以通过两种方式修改实体。

          首先(使用 jdl-studio):

          按照以下步骤更新 .jh 或 .jdl 文件:

          1) 使用jhipster export-jdl myApp-jdl.jh 命令将.jh 文件导出到项目的根文件夹。您也可以使用jhipster export-jdl myPath/myApp-jdl.jh 将.jh 文件导出到特定路径

          2) 在这里,您可以编辑现有实体。您还可以添加新实体。

          3) 然后将此 myApp-jdl.jh 文件保存到项目的根文件夹并运行 jhipster import-jdl myApp-jdl.jh 或者您可以将其存储在系统上的任何位置并提供导入路径!喜欢,jhipster import-jdl myPath/myApp-jdl.jh

          第二(使用 JHipster CLI):

          按照官方文档jhipster.tech/creating-an-entity/ 的建议,您可以通过以下步骤更新您的实体:

          1) 键入与我们使用 CLI 创建实体相同的命令 jhipster entity &lt;my_entity_name&gt;。这里&lt;my_entity_name&gt; 是我们要修改的实体名称。

          2) 它将为您提供不同的选项,例如重新生成实体、添加更多字段和关系、删除字段和关系等。

          3) 根据我们的要求进行修改。

          注意:它将自动删除您在预建的 JHipster 项目上所做的手动更改!

          解决方案:

          1) 在修改或添加新实体之前提交代码。

          2) 当它要求您覆盖对文件的更改时,您可以根据需要跳过覆盖选项。只是建议不要更改导航栏 html 文件。

          3) 之后,您可以将其打开到 Intellij 或 Eclipse。然后您可以通过本地历史记录修改其他更改的文件。在 Intellij 中,本地历史记录将在 VCS 菜单中。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-08-26
            • 2021-07-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-08-04
            • 2016-07-20
            • 2021-04-04
            相关资源
            最近更新 更多