【问题标题】:Roo 2.0 How to change Hibernate from Create to Update with no persistence.xmlRoo 2.0 如何在没有 persistence.xml 的情况下将 Hibernate 从 Create 更改为 Update
【发布时间】:2018-02-04 04:29:10
【问题描述】:

我已准备好将我的应用程序部署到生产环境,并找到persistence.xml 以将其从创建更改为更新,以便数据被持久化....等等,没有persistence.xml

如何进行更改?

【问题讨论】:

    标签: hibernate spring-roo


    【解决方案1】:

    Spring Roo 2.0 生成 Spring Boot 应用程序,因此您需要使用 application.properties 文件配置持久性属性。在 Spring Boot 应用程序中,不需要persistence.xml 文件。

    默认情况下,Spring Roo shell 生成的属性将持久性配置为持久化数据,而不是在每次部署应用程序时都创建它。

    这是一个关于使用 Spring Roo 命令配置持久性的示例:

    jpa setup --provider HIBERNATE --database POSTGRES --databaseName myDB --userName admin --password admin --hostName localhost

    src/main/resources/application.properties

    spring.datasource.driver-class-name=org.postgresql.Driver
    spring.datasource.password=admin
    spring.datasource.url=jdbc\:postgresql\://localhost\:5432/myDB
    spring.datasource.username=admin
    spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.ImprovedNamingStrategy
    

    如果您已经使用与上面提供的类似命令在项目中配置了持久性,那么您的application.properties 文件中应该有一个非常相似的持久性配置。但是,您说您的数据没有持久化,因此您可能会遇到以下问题:

    1. 您将项目配置为使用内存数据库,如 HYPERSONIC_IN_MEMORY,因此当您重新启动应用程序时,数据将被删除。 解决方案:更改为 Postgresql、Mysql、Oracle 等非易失性数据库,使用正确的配置再次执行 jpa 命令。
    2. 您已经执行了示例script clinic.roo,之后您更新了代码以生成您自己的应用程序。示例clinic.roo 文件配置了一个HYPERSONIC_IN_MEMORY 数据库,因此您将遇到与第1 点所述相同的问题。 解决方案:再次执行jpa 命令以配置持久性非易失性数据库。
    3. 您已经在application.properties 文件中手动配置了spring.jpa.hibernate.ddl-auto 属性,其值为createcreate-drop解决方案:将此属性的值更改为validateupdate 值。

    无论如何,我建议您,如果您将使用 Spring Boot 应用程序,请使用 Spring Boot 官方文档阅读更多关于它们的信息:

    https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/

    另外,最好检查一下您可以在 application.properties 文件中配置的所有可用属性:

    https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties

    希望对你有帮助,

    【讨论】:

    • 我明白你在说什么,但它与我所看到的并不完全一致......例如你说,“默认情况下,Spring Roo shell 生成的属性配置持久性保存数据,而不是在每次部署应用程序时都创建它。”但这不是我看到的当你有“创建”而不是“在persistence.xml 中更新。我的log.roo 显示......”我的应用程序“jpa setup --provider HIBERNATE --database HYPERSONIC_PERSISTENT”时它正在创建的内容。属性有,没有 hibernate.hbm2ddl.auto
    • 非常感谢。这很有用
    【解决方案2】:

    好的,所以我询问了时间并获得了学习如何制作手表的规范,

    答案很简单……

    spring.jpa.hibernate.ddl-auto=更新

    将此添加到 application.properties。

    JCG确实提供了一个提示……虽然他说我改变了设置,但它并没有改变,并且默认是“创建”而不是更新。

    最有用的是他的链接

    application.properties documentation

    谢谢。

    【讨论】:

      猜你喜欢
      • 2014-02-18
      • 1970-01-01
      • 2023-03-16
      • 2012-10-03
      • 2011-11-10
      • 2019-11-09
      • 1970-01-01
      • 2011-12-07
      • 2022-11-07
      相关资源
      最近更新 更多