首页 > 解决方案 > 每次启动应用程序时,Spring data.sql 文件都会添加一条新记录。

问题描述

这是我的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');

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

有任何想法吗?

标签: javasqlspringpostgresqlhibernate

解决方案


一种可能的解决方案是使用 fixed 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,在这种情况下它是一个很好的工具。


推荐阅读