В соответствии с официальной документацией по использованию таблиц @Relation и Junction для перекрестных отношений между двумя таблицами, и у меня нет хороших результатов.
Я использую эти две сущности:
@Entity(tableName = "Dog",
foreignKeys = arrayOf(
ForeignKey(entity = Owner::class,
parentColumns = arrayOf("ownerId"),
childColumns = arrayOf("dogOwnerId"))
))
data class Dog(
@PrimaryKey val dogId: Long,
val dogOwnerId: Long,
val name: String,
val cuteness: Int,
val barkVolume: Int,
val breed: String
)
@Entity
data class Owner(@PrimaryKey val ownerId: Long, val name: String)
используя эту таблицу, чтобы присоединиться к ним
@Entity(primaryKeys = ["dogId", "ownerId"])
data class DogOwnerCrossRef(
val dogId: Long,
val ownerId: Long
)
и этот класс для ответа Query :
data class DogWithOwners(
@Embedded val dog: Dog,
@Relation(
parentColumn = "dogId",
entity = Owner::class,
entityColumn = "ownerId",
associateBy = Junction(DogOwnerCrossRef::class)
)
val owners: List<Owner>
)
My DAO :
@Transaction
@Query("SELECT * FROM Dog")
fun getdogWithOwners(): List<DogWithOwners>
результат всегда равен нулю для объектов Owner, который выглядит так, как будто @Transaction не был выполнен, я озадачен тем, как обработать этот запрос без выполнения запросов на соединение.