You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Floor中如何触发新实体的数据库迁移?

部署时自动创建新实体对应数据表的方案

通用核心思路

不管使用哪种持久化框架,核心都是让框架在应用启动时检测到新增的实体类,并根据实体定义自动生成对应数据库表。关键在于配置框架的自动建表策略,确保它不仅能处理已有表的列修改,还能识别新增实体并创建表。


针对常见框架的具体操作

1. JPA/Hibernate 场景

  • 检查配置文件(application.properties/application.yml)中的Hibernate参数:
    • 确保spring.jpa.hibernate.ddl-auto(Spring Boot环境)或hibernate.hbm2ddl.auto(原生Hibernate)设置为update。这个策略的作用是:
      • 自动创建不存在的表(包括新的Resource实体对应的表)
      • 保留已有表的数据和结构,仅调整不符合实体定义的列
      • 不会删除已有表或数据
    • 示例Spring Boot配置:
      spring.jpa.hibernate.ddl-auto=update
      spring.jpa.show-sql=true # 可选,用于查看框架生成的建表SQL
      
  • 确认新的Resource实体类已添加@Entity注解,且被Spring容器扫描到(比如实体类放在启动类的同级/子包下,或通过@EntityScan指定扫描路径)。

2. MyBatis Plus 场景

  • 开启自动建表功能:
    • 在配置文件中添加以下参数:
      mybatis-plus.global-config.db-config.id-type=auto # 可选,根据需求设置主键生成策略
      mybatis-plus.configuration.map-underscore-to-camel-case=true # 可选,开启驼峰字段与数据库下划线字段的映射
      
    • 给Resource实体类添加必要注解:@TableName(可选,指定表名)、@TableId(标记主键字段)等,并确保实体类被MyBatis Plus扫描到(通过@MapperScan指定DAO接口路径即可,实体类默认会被关联扫描)。
    • 若使用旧版本MyBatis Plus,需确保引入mybatis-plus-boot-starter依赖,并配置db-type指定数据库类型。

3. 原生JDBC/自定义DAO场景

  • 编写初始化SQL脚本,让应用启动时自动执行:
    • 在resources目录下创建schema.sql,写入创建Resource表的SQL:
      CREATE TABLE IF NOT EXISTS resource (
          id BIGINT PRIMARY KEY AUTO_INCREMENT,
          name VARCHAR(255) NOT NULL,
          url VARCHAR(512) NOT NULL,
          create_time DATETIME DEFAULT CURRENT_TIMESTAMP
          -- 其他字段根据实体定义补充
      );
      
    • 在Spring Boot中配置spring.sql.init.mode=always(或embedded仅针对嵌入式数据库),让应用启动时自动执行该脚本。

注意事项

  • 生产环境禁止使用create或create-drop策略,避免误删已有数据,update或validate是更安全的选择。
  • 多环境配置时,要确保生产环境的建表策略不会意外修改已有数据。
  • 部署前先在测试环境验证,确认新表能正常创建且原有数据不受影响。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 21:52:44