首页 > 解决方案 > 将具有较少字段的新 POJO 类映射到现有 Room 表

问题描述

目前,我们有以下 Dao 和模型类。

笔记道

@Query("SELECT * FROM note")
public abstract LiveData<List<Note>> getAllNotes();

笔记类

@Entity(
    tableName = "note"
)
public class Note {
    @ColumnInfo(name = "title")
    private String title;

    // Can contain a huge String.
    @ColumnInfo(name = "body")
    private String body;
}

但是,在某些情况下,我们只对加载感兴趣title

一次加载所有Note带有大body字符串的 s,可能会导致OutOfMemoryException

有什么办法,我们可以创建另一个 POJO 如下?

public class SimpleNote {
    private String title;
}

然后,我们可以返回SimpleNotefrom的列表NoteDao

@Query("???")
public abstract LiveData<List<SimpleNote>> getAllSimpleNotes();

标签: androidsqliteandroid-sqliteandroid-roomandroid-database

解决方案


这将为您工作:

@Query("SELECT title FROM note") 
LiveData<List<String>> getAllNoteTitles();

当您调用SELECT *时,它将选择表内的所有字段。


推荐阅读