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类型时触发错误
原因
该错误通常由以下原因导致:
- 修改DAO方法后未重新生成代码,框架仍使用旧的适配器逻辑;
- 实体类构造函数不符合要求,导致List类型的查询映射失败。
解决方案
- 先解决问题1中的实体类构造函数问题;
- 强制重新生成Floor数据库代码:
flutter packages pub run floor generate - 若仍报错,清理项目缓存后重新生成:
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
相关产品推荐
相关产品推荐

