【发布时间】:2026-01-19 07:05:02
【问题描述】:
我有以下实体
public class User {
@PrimaryKey
private final long id;
private String _id;
private String userName;
private String email;
}
但是,当我尝试使用房间持久性库在 android 中为该实体创建表时,出现以下错误。
Error:(18, 20) error: Ambiguous getter for Field(element=_id, name=_id, type=java.lang.String, affinity=TEXT, columnName=_id, parent=null, indexed=false). All of the following match: getId, get_id. You can @Ignore the ones that you don't want to match.
包含_id 字段,这样我就可以直接翻译来自连接到mongodb 数据库的node.jsapi 的响应。
【问题讨论】:
-
如果你的类列表是完整的,那么我怀疑 Room 不喜欢具有相同基本名称的字段,不同之处仅在于
_前缀。你能在 JSON 方面做点什么吗,比如@SerializedName和 Gson,允许字段有不同的名称(例如,mongodb_id)?另外,您的课程列表是否完整,或者是否有您当前列表未显示的 getter 方法? -
你的意思是当我得到 API 的响应时?它会自动将所有_id字段序列化为mongodb_id吗?
-
是的,我在问这是否可能。我不知道您的 Web 服务客户端 API 使用的是什么。一些在 Android 上工作的 JSON 解析器,例如 Gson,支持
@SerializedName之类的注解,因此 JSON 中的名称可以与 Java 字段名称不同。 -
使用
@SerialName("_id") String "yourval" ;这肯定会帮助你。
标签: android android-room