Могу ли я явно использовать JOIN в DAO вместо использования @Relationship?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Могу ли я явно использовать JOIN в DAO вместо использования @Relationship?

Сообщение Anonymous »

Я использую базу данных комнат для создания приложения для Android и хочу получить предложения от сообщества.
Предположим, у меня есть сущность Note и метка. код> Сущность. Оба из них имеют отношение n - n с другим.
Поэтому, когда я хочу вернуть список меток с его примечаниями или список примечаний с его метками, мне нужно написать собственный запрос в DAO и определить данные класс для хранения возвращаемого значения.

Код: Выделить всё

@Entity(tableName = "notes")
data class Note(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id")
val id: Int = 0,
@ColumnInfo(name = "title")
val title: String,
@ColumnInfo(name = "content")
val content: String,
@ColumnInfo(name = "created_at")
val createAt: Long,
@ColumnInfo(name = "updated_at")
val updatedAt: Long
)

@Entity(
tableName = "labels",
indices = [androidx.room.Index(value = ["name"], unique = true)]
)
data class Label(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id")
val id: Int = 0,
@ColumnInfo(name = "name")
val name: String
)

@Entity(tableName = "note_labels",
indices = [androidx.room.Index(value = ["note_id", "label_id"], unique = true)])
data class NoteLabel(
@PrimaryKey(autoGenerate = true)
val id: Int  = 0,
@ColumnInfo(name = "note_id")
val noteId: Int,
@ColumnInfo(name = "label_id")
val labelId: Int
)
Мой вопрос: Должен ли я использовать аннотацию @Relation или вручную написать запрос JOIN в DAO? Я думаю, что оба они используют для возврата карты значения и связанные с ним данные.
Итак, какой из них лучше с точки зрения документации, ясности и удобства сопровождения?
Я попробовал это, и он вернулся правильное значение

Код: Выделить всё

    @Query("SELECT * FROM notes " +
"JOIN note_labels ON notes.id = note_labels.note_id " +
"JOIN labels ON note_labels.label_id = labels.id")
suspend fun getAllNotesWithLabels(): Map

@Query("SELECT * FROM labels JOIN note_labels ON labels.id = note_labels.label_id JOIN notes ON note_labels.note_id = notes.id")
suspend fun getAllLabelsWithNotes(): Map

Следует ли мне перейти на использование @Relation или оставить этот подход?

Подробнее здесь: https://stackoverflow.com/questions/785 ... lationship
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»