【问题标题】:Spring data.sql file adds a new record every time I start the app.每次启动应用程序时,Spring data.sql 文件都会添加一条新记录。
【发布时间】:2018-07-12 19:08:37
【问题描述】:

这是我的application.properties 文件:

spring.datasource.url= jdbc:postgresql://localhost:5432/Crypto
spring.datasource.username=postgres
spring.datasource.password=wololo
spring.jpa.hibernate.ddl-auto=update
spring.datasource.initialization-mode=always

这是我的data.sql 文件:

INSERT INTO crypto(departure, details, lowest_price_date, lowest_price_ever, coin_name, url)
VALUES (null, null, null, 10, 'foooobs', 'http://foo.foo');

问题是每次我重新启动应用程序时,都会添加一条新记录,即使它存在于上一个会话中。我只想用数据初始化数据库一次,永远不要改变它。

有什么想法吗?

【问题讨论】:

  • 如果您在 data.sql 文件中进行更改,例如添加一条新记录,该怎么办?在这种情况下应该怎么办?忽略该记录还是创建它?
  • 它应该是这样工作的。如果您正在考虑另一种行为,那是您在尝试做某事。错误 :) 只需将 spring.jpa.hibernate.ddl-auto 更改为 spring.jpa.hibernate.ddl-auto=create-drop ,每次您都会重新创建数据库。它非常适合开发。如果您需要 DB 的一次性初始化 - 考虑使用 smth.像 FlyWay 或删除 data.sql 并在您的数据库上手动运行该脚本

标签: java sql spring postgresql hibernate


【解决方案1】:

一种可能的解决方案是使用固定的ids

INSERT INTO 
crypto (id, departure, details, lowest_price_date, lowest_price_ever, coin_name, url)
        ^^
VALUES (1, null, null, null, 10, 'foooobs', 'http://foo.foo');
        ^

那么会发生什么,首先你用这个解决方案创建spring.jpa.hibernate.ddl-auto=update,如果记录不退出,则创建一个新记录,如果退出,则只更新属性,而不是创建新记录。


或者你可以看看flyway,在这种情况下它是一个很好的工具。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2014-01-15
    • 1970-01-01
    • 2021-03-18
    相关资源
    最近更新 更多