当使用Room Persistence Library for Android进行插入操作时,如果主键是自动生成的字段,我对其返回值不确定。
例如,假设您有一个Room实体类如下:
@Entity()
public class Message {
@PrimaryKey(autoGenerate = true)
public long id;
public String text;
}
并且有一个像这样的Dao接口:
@Dao
public interface MessageDao {
@Insert
long insert(Message messages);
@Update
void update(Message... messages);
}
我创建了一个Message实例,然后将其持久化,如下所示:
Message message = new Message();
message.text = "Hello!"
long rowId = AppDatabase.getInstance(context).messageDao().insert(message);
insert()返回的rowid值是否总是等于Room分配给主键字段"id"的值,还是它们可能不同?
换句话说,"id"字段是否是底层SQLite表中rowid列的别名?
如果它们是别名,我可以将rowid值存储在我的"id"字段中,以备将来使用(例如用于更新),就像这样:
message.id = rowId;
message.text = "Goodbye!"
AppDatabase.getInstance(context).messageDao().update(message);
如果它们不是别名,我该如何做到呢?