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

如何编写Room的DAO查询返回以name为键的Map<String, Address>数据?

用Room DAO返回指定字段为键的Map结果

场景说明

现有数据表MyTable,字段包括id、name、city、street、zipcode,对应的数据类定义如下:

data class Address(
    val city: String,
    val street: String,
    val zipcode: String
)

想要通过Room DAO查询返回一个Map<String, Address>,其中键是表中的name字段,值是对应行转成的Address对象。直接写普通的SELECT查询无法实现这个需求,最初的DAO方法定义如下:

@Query("SELECT ... FROM MyTable .... WHERE id = :id")
suspend fun getAddress(id: Long): Map<String, Address>

可行方案

使用Room提供的@MapColumn注解,明确指定Map的键对应的数据库列名,修改后的DAO方法如下:

@Query("SELECT name, city, street, zipcode FROM MyTable WHERE id = :id")
suspend fun getAddress(id: Long): Map<@MapColumn(columnName = "name") String, Address>

关键要点

  • 查询语句必须包含name字段(作为Map的键),以及Address类对应的所有字段(city、street、zipcode),否则Room无法完成正确映射
  • 需要确保导入androidx.room.MapColumn注解类

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 23:29:57