当前位置: 首页 > 知识库问答 >
问题:

播种初始数据data.sqlSpring启动

华章横
2023-03-14

数据sql是在创建JPA实体之前执行的,它会导致找不到表的错误。有人能帮我吗?我在Spring Boot加载初始数据的链接中看到了相同的问题,但这个问题没有得到回答。

共有1个答案

史修明
2023-03-14

我相信这是Springboot自2.5版以来的一种正常行为。这背后的思想是纯SQL(使用schema.SQLdata.SQL)和基于JPA的数据库创建技术是两种不同的数据库初始化方法。

默认情况下,框架将声明只使用一个,并优先使用基于SQL的。将按照以下顺序进行初始化:

  1. 运行schema.sql来创建和操作数据库结构(DDL)
  2. 运行data.sql填充数据库(DML)
  3. 初始化您的EntityManagerFactory

为了实现您想要的行为,您需要告诉他将JPA优先于纯SQL。这可以通过配置中的以下设置来完成:

spring.jpa.defer-datasource-initialization=true

更多详情见官方文件第9.3点。

 类似资料:
  • 问题内容: 我想在Web应用程序启动时加载属性文件并设置连接池。显然,我只想在一个地方进行一次,因此可以根据需要进行更改。对于常规的servlet,我只需将初始化代码放在servlet的init()方法中,但是您无法使用Jersey servlet对其进行访问。那么我在哪里做呢?上面链接中的侦听器如何工作? 问题答案: 您需要做的就是编写一个实现ServletContextListener接口的J

  • 初始化数据 打开MainSetup类,在Daos语句后面插入新建根用户的代码 // 初始化默认根用户 if (dao.count(User.class) == 0) { User user = new User(); user.setName("admin"); user.setPassword

  • 当你首次建立一个应用的时候,为你的数据库预先安装一些硬编码的数据,是很有用处的。 有几种方法可以让Django自动创建这些数据:你可以通过fixtures提供初始数据,或者提供一个包含初始数据的sql文件。 通常来讲,使用fixtrue更加简洁,因为它是数据库无关的,而使用sql初始化更加灵活。 提供初始数据的fixtures fixture是数据的集合,让Django了解如何导入到数据库中。创建

  • 我有以下docker compose文件(): 以及下面的: 然后执行以下命令: 它会导致错误: 在日志中,我看到以下内容: 看起来flyway在数据库初始化之前启动,因此无法连接到数据库,我看到下面的错误。 我怎样才能解决这个问题? 我谷歌了类似的问题,我找到了以下建议:https://github.com/vishnubob/wait-for-it但我是docker的新手,我不明白如何将其放入

  • 问题内容: 我想知道在应用程序启动之前加载初始数据库数据的最佳方法是什么?我正在寻找的东西将用数据填充我的H2数据库。 例如,我有一个域模型“ User”,我可以通过转到/ users来访问用户,但是最初数据库中没有任何用户,所以我必须创建它们。无论如何,是否有自动用数据填充数据库的信息? 目前,我有一个由容器实例化并为我创建用户的Bean。 例: 但是我非常怀疑这是最好的方法。还是? 问题答案:

  • 我有不使用Flyway的现有数据库postgres,我需要复制它。如何将现有数据库状态移动到新的空数据库?我没有任何迁移sql。所以我期待像Liquibase中的GenerateChangelog这样的命令,但在Flyway中似乎没有这样的命令。