Android Room无法正常处理私有属性问题咨询
Room Note实体类规范实现
看起来你已经在Room中定义了Note实体类,并且配置了必要的注解,Room确实会自动识别私有属性的符合JavaBean规范的getter方法,这点完全可以放心。以下是整理好的规范代码(我补全了你截断的UUID生成部分):
@Entity(tableName = "notes") public final class Note { @PrimaryKey @ColumnInfo(name = "id") @NonNull private final String mId; @ColumnInfo(name = "title") @Nullable private final String mTitle; @ColumnInfo(name = "desc") @Nullable private final String mDesc; // Room会使用这个全参构造函数创建实体实例 public Note(@NonNull String id, @Nullable String title, @Nullable String desc) { this.mId = id; this.mTitle = title; this.mDesc = desc; } // 被@Ignore标注的构造函数,仅用于业务代码,Room不会用它做数据库操作 @Ignore public Note(@Nullable String title, @Nullable String desc) { this(UUID.randomUUID().toString(), title, desc); } // 符合JavaBean规范的getter方法,Room会自动识别并用于字段访问 @NonNull public String getId() { return mId; } @Nullable public String getTitle() { return mTitle; } @Nullable public String getDesc() { return mDesc; } }
几个关键细节提示:
- Room依赖JavaBean规范的getter命名规则识别私有字段,只要你的getter是
get[字段名首字母大写]的格式(比如getId()对应mId),就能正常工作 @Ignore注解的构造函数是给业务逻辑用的,Room会自动选用包含所有实体字段的全参构造函数来处理数据库操作- 被
@NonNull标注的字段(比如mId),插入数据库时必须传入非null值,否则会触发Room的非空校验异常 - 用
UUID.randomUUID().toString()生成主键是个可靠的方案,能保证主键的全局唯一性
内容的提问来源于stack exchange,提问作者Derek
相关产品推荐
相关产品推荐

