У меня есть две сущности Room:
@Entity(tableName = LocationsTable.NAME)
data class LocationDto(@PrimaryKey val timestamp: Long,
val latitude: Double,
val longitude: Double,
val altitude: Double)
@Entity(tableName = TripsTable.NAME)
data class TripDto(@PrimaryKey(autoGenerate = true) val _id: Long,
val startTime: Long,
val endTime: Long)
И теперь я пытаюсь выполнить JOIN, чтобы получить такой объект:
data class TripWithLocationDto(val startTime: Long,
val endTime: Long,
val locations: List<LocationDto>)
Locations должны содержать locationDtos между временем начала и окончания объекта поездки. Запрос должен выглядеть примерно так:
SELECT trips_table.start_time, trips_table.end_time FROM trips_table JOIN locations_table WHERE locations_table.timestamp >= trips_table.start_time AND locations_table.timestamp <= trips_table.end_time
Все статьи описывают реализацию только с внешними ключами. Кто знает как заставить работать?
Вы создаете внешние ключи в классе сущности, к которому хотите присоединиться, а после этого создаете другой класс сущности, в котором вы берете поле обеих таблиц, к которым вы присоединяетесь, и помещаете запрос на соединение, как вы сделали выше в dao. Вы также можете проверить ссылку ниже. во многих тегах отношений
https://android.jlelse.eu/android-architecture-components-room-relationships-bf473510c14a
Вы также можете перейти по ссылке ниже, которая находится в котлине: -
http://danielgaribaldi.com/room-persistence-library-part-2-room-relationships/