带有spring boot JPA Postgresql的data.sql未加载

Posted

技术标签:

【中文标题】带有spring boot JPA Postgresql的data.sql未加载【英文标题】:data.sql with spring boot JPA Postresql is not loading 【发布时间】:2020-10-18 01:36:41 【问题描述】:

我已经编写了一个 Spring Boot 应用程序。我想用 data.sql 文件设置初始数据库数据。

src/main/resources/application.properties

spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=$JDBC_DATABASE_URL
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.initialization-mode=always
spring.jpa.show-sql=true

src/main/java/package_name/model/my_entity

@Entity
@Table(name = "user_entry")
public class User 
    @Id
    @Column(nullable = false, length = 50)
    private String userId;
    @Column(nullable = false, length = 50)
    private String firstName;
    @Column(nullable = false, length = 50)
    private String lastName;
    @Column(nullable = false, length = 50)
    private String password;
    @OneToMany(mappedBy = "owner", cascade = CascadeType.ALL, orphanRemoval = true)
    private Set<SongList> songLists;

    public User() 
    
    ...

src/main/resources/data.sql

insert into user_entry (user_id, first_name, last_name, password) values
('MaMu', 'Maxime', 'Muster', 'pass1234');

但是在部署期间数据似乎没有加载到数据库中。

编辑:

在我的 src/main/resources/application.properties 中添加 spring.datasource.data= classpath:/data.sql 解决了这个问题。

【问题讨论】:

【参考方案1】:

我们有这些属性来创建记录并将其插入表中。因为你只需要插入记录就可以避免spring.datasource.schema

spring.datasource.schema= # Schema (DDL) script resource references.
spring.datasource.data= # Data (DML) script resource references.

设置 SQL 文件

spring.datasource.data= classpath:/data.sql

注意事项:

对于同一个文件中的模式生成和插入,不要使用spring.datasource.data,我们必须使用spring.datasource.schema 将所有文件保存在 src/main/resources 设置spring.datasource.initialization-mode=always 还要确保您没有使用spring.jpa.generate-ddl=true,因为它会在幕后设置hibernate.hbm2ddl.auto=update,并使spring.jpa.hibernate.ddl-auto=create 无效

【讨论】:

更多详情可以探索***.com/a/57528481/10961238 嘿,谢谢。这对我完全有用。另一个问题是在 SQL 语句中使用双引号而不是单引号。【参考方案2】:

如果您的实体未被考虑在您的 Springboot 主类上添加下面的注释,就在您的 @SpringBootApplication 注释下方,

@EntityScan(basePackages = "package_name.model.my_entity"

此外,从实体中删除 @Id 标记后它对我有用(不确定这可能是原因)。

【讨论】:

对不起,这个版本让我的整个应用程序在启动时崩溃

以上是关于带有spring boot JPA Postgresql的data.sql未加载的主要内容,如果未能解决你的问题,请参考以下文章

带有 Axon 的 Spring Boot JPA

带有查询 Spring-Boot jpa 1.5 的可选参数

带有 Jackson 和 Spring Boot 的实体 JPA 中的循环引用

带有spring boot JPA Postgresql的data.sql未加载

带有 Spring Boot 和 websphere 8.5.0.1 的 JPA 2.1

Spring boot(带有 jpa 的 mysql):没有名为“entityManagerFactory”的 bean 可用