У меня есть несколько вложенных сущностей:
data class Issue {
val id: String
//...
}
data class Event {
val id: String,
val isseuId: String
//...
}
data class Document {
val id: String,
val eventId: String
//...
}
И некоторые сущности, которые их объединяют:
data class IssueWithEvents(
@Embedded val issue: Issue,
@Relation(
parentColumn = "id",
entityColumn = "issueId",
entity = Event::class
) var events: List<EventWithDocuments>
)
data class EventWithDocuments(
@Embedded val event: Event,
@Relation(
parentColumn = "id",
entityColumn = "eventId",
entity = Document::class
) var documents: List<Document>
)
Тогда есть Дао:
@Dao interface IssueWithEventsDao {
@Query("SELECT * from Issue WHERE syncStatus == 'New'")
fun getNewIssuesWithEvents(): List<IssueWithEvents>
@Query("SELECT * FROM Issue WHERE id == :issueId")
fun liveIssueWithEvents(issueId: String): LiveData<IssueWithEvents>
@Query("SELECT * FROM Issue WHERE id == :issueId")
suspend fun issueWithEvents(issueId: String): IssueWithEvents
}
Странно то, что getNewIssuesWithEvents
и issueWithEvents
работают хорошо, а liveIssueWithEvents
- нет.
PS Забыл упомянуть, как я их называю ... этот код работает хорошо:
class IssuePreviewViewModel(val issue: Issue) : ViewModel(), KoinComponent {
private val repo: IssueRepository by inject()
val liveIssueWithReferencedData: LiveData<IssueWithEvents> = MutableLiveData()
init {
viewModelScope.launch {
val issueWithData = repo.issueWithEvents(issue.id)
(liveIssueWithReferencedData as MutableLiveData).value = issueWithData
}
}
}
Но он не подписывается на изменения, поэтому моя первоначальная попытка была такой:
class IssuePreviewViewModel(val issue: Issue) : ViewModel(), KoinComponent {
private val repo: IssueRepository by inject()
val liveIssueWithReferencedData: LiveData<IssueWithEvents> = repo.liveIssueWithEvents(issue.id)
}
И это не работает. liveIssueWithReferencedData.value
всегда null
.