У меня есть объект с именем Note
, который выглядит следующим образом:
@Entity(tableName = "notes")
@TypeConverters(DateConverter::class)
data class Note(
@ColumnInfo(name = "note_title") var title: String,
@ColumnInfo(name = "note_description") var description: String,
@ColumnInfo(name = "note_color") var color: String,
@ColumnInfo(name = "note_isDeleted") var isDeleted: Boolean,
@ColumnInfo(name = "note_isPrivate") var isPrivate: Boolean
) {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "note_id")
var id: Long = 0
var labels: List<Label> = ArrayList<Label>()
@ColumnInfo(name = "note_creationDate")
var creationDate: Date = Date()
@ColumnInfo(name = "note_modificationDate")
var modificationDate: Date = Date()
}
И объект с именем Label
:
@Entity(tableName = "labels")
class Label (
@ColumnInfo(name = "label_name") var name: String
){
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "label_id")
var id: Long = 0
}
Эти два объекта имеют много -много отношения, поэтому у меня есть сущность crossRef:
@Entity(tableName = "noteLabelCrossRef", primaryKeys = ["note_id", "label_id"], indices = [Index(value = ["label_id"])])
class NoteLabelCrossRef (
@ColumnInfo(name = "note_id") var noteId: Long,
@ColumnInfo(name = "label_id") var labelId: Long
)
, и это результат запроса, если я хочу получить метки заметки:
class NoteWithLabels {
@Embedded
var note: Note? = null
@Relation(
parentColumn = "note_id",
entityColumn = "label_id",
associateBy = Junction(NoteLabelCrossRef::class)
)
var labels: List<Label>? = null
}
Внутри моего DAO У меня есть метод, который возвращает список заметок:
@Query("SELECT * FROM notes WHERE notes.note_isDeleted = 0 AND notes.note_isPrivate = 0 ORDER BY note_creationDate DESC")
fun getNormal(): LiveData<List<Note>>
Дело в том, что я хочу, чтобы каждый note
заполнил свой столбец labels
списком меток (если он имеет any) from NoteWithLabels
.
Но я хочу сделать это только с одним запросом, поэтому все, что мне нужно сделать, это позвонить по номеру dao.getNormal()
, и заметки будут также запрашиваться с их метками.
Я читал о вычисленных / сгенерированных столбцах в SQLite, но не смог найти решение для моей проблемы