在一个Spring Boot应用程序中,我使用的是Hibernate,并且正确地创建了2个表。然而,我还需要插入这些表中的一个数据,为此,我认为我应该使用Flyway。
然后,我只向Flyway添加了INSERT子句,并在应用程序中为Hibernate和Flyway使用以下参数。属性:v
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto= update # also tried none
spring.flyway.url=jdbc:mysql://localhost:3306
spring.flyway.schemas=demo-db
spring.flyway.user=root
spring.flyway.password=******
我没有使用Flyway来初始化数据库,我不确定是否可以像我上面提到的那样将Flyway与Hibernate一起使用。或者,我应该禁用Hibernate表创建并创建另一个用于创建表的迁移脚本吗?
2条答案
按热度按时间46scxncf1#
如果只对
insert data
使用Flyway,请不要这样做。尝试使用以下命令:使用Hibernate:
此外,如果Hibernate从头开始创建模式(即,如果DDL-AUTO属性设置为CREATE或CREATE-DROP),则在启动时执行类路径根目录中名为port.sql的文件。
使用基本的SQL脚本:
Spring Boot可以自动创建您的JDBC数据源或R2DBC ConnectionFactory的模式(DDL脚本)并对其进行初始化(DML脚本)。它从标准根类路径位置加载SQL:schema.sql和data.sql
bvn4nwqk2#
这里的问题是Hibernate不会自动创建表。此外,如果使用的是Spring Boot,Flyway将在使用Hibernate的服务启动之前运行。因此,您的Flyway脚本正在与一个不存在的表交互。
推荐的方法是使用Flyway来管理数据库结构、创建表等和静态数据。这将意味着您的数据库已经为您的服务和Hibernate可以连接做好了版本和供应准备。