Java 每次启动应用程序时,Spring data.sql文件都会添加一条新记录。

Java 每次启动应用程序时,Spring data.sql文件都会添加一条新记录。,java,sql,spring,postgresql,hibernate,Java,Sql,Spring,Postgresql,Hibernate,这是我的应用程序.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.sq

这是我的
应用程序.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');
问题是每次我重新启动应用程序时,都会添加一条新记录,即使它存在于上一个会话中。我只想用数据初始化数据库一次,永远不要更改它


有什么想法吗?

一个可能的解决方案是使用固定的
ID

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
,如果记录没有退出,那么创建一个新的记录;如果记录已经退出,那么只需更新属性,而不创建新的记录



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

如果您在data.sql文件中进行更改(例如添加新记录),会怎么样?在这种情况下会发生什么?忽略那个记录还是创建它?这就是它应该如何工作的。如果你在考虑另一种行为,那就是你在尝试做smth。错误:)只需将
spring.jpa.hibernate.ddl auto
更改为
spring.jpa.hibernate.ddl auto=create drop
,每次都会重新创建数据库。对于开发来说,这是非常好的。如果您需要一次IMIT,请考虑使用SMTH。比如
FlyWay
或者删除
data.sql
,然后在数据库上手动运行该脚本