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

Floor v1.5.0查询异常求助:单实体返回空、列表查询报错

问题排查与解决方案

问题1:findByKey()返回null但数据实际存在

原因

Floor框架将数据库查询结果映射为实体对象时,要求实体类具备可被框架实例化的构造函数。你的Settings类仅提供了带必填参数的构造函数,Floor无法自动创建实例来映射查询到的数据行,因此返回null。

解决方案

修改Settings实体类,添加符合Floor要求的构造函数:

@Entity()
class Settings {
  @PrimaryKey(autoGenerate: true)
  int? id;
  String key;
  String? value;

  // 保留原有构造函数供业务代码使用
  Settings(this.id, this.key, this.value);

  // 添加无参构造函数,供Floor映射数据使用
  Settings.empty() : id = null, key = '', value = null;

  // 也可使用命名参数构造函数兼顾业务与框架需求
  // Settings({this.id, required this.key, this.value});
}

修改后重新生成Floor代码:

flutter packages pub run floor generate

问题2:findByKey2()返回List类型时触发错误

原因

该错误通常由以下原因导致:

  1. 修改DAO方法后未重新生成代码,框架仍使用旧的适配器逻辑;
  2. 实体类构造函数不符合要求,导致List类型的查询映射失败。

解决方案

  1. 先解决问题1中的实体类构造函数问题;
  2. 强制重新生成Floor数据库代码:
    flutter packages pub run floor generate
    
  3. 若仍报错,清理项目缓存后重新生成:
    flutter clean
    flutter pub get
    flutter packages pub run floor generate
    

额外验证建议

  • 使用Android Studio的Database Inspector等工具,确认Settings表中key字段的值确实为'update_date_time';
  • 给findByKey()的查询语句添加LIMIT 1,确保只返回单条结果:
    @Query("SELECT * FROM Settings WHERE key = 'update_date_time' LIMIT 1")
    Future<Settings?> findByKey();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:56:06