@ Embedded аннотация может использоваться для объединения сущностей в классе.
Например, при использовании сущностей из вопроса альтернативой для класса ListItem может быть: -
Префикс
class UserOfficePlacesCombined() {
@Embedded(prefix = "user")
var user: User? = null
@Embedded(prefix = "office")
var office: Office? = null
@Embedded(prefix = "places")
var places: Places? = null
}
- использовался, чтобы избежать неоднозначности имен столбцов, короче говоря, все столбцы будут иметь префикс с именем соответствующей таблицы (см. Следующий запрос Дао)
Вы можетезатем извлеките UserOfficePlacesCombined с помощью Дао-запроса, такого как: -
@Query("SELECT user.id AS userid, user.name AS username, " +
"office.id AS officeid, office.address AS officeaddress, " +
"places.id AS placesid, places.name AS placesname " +
"FROM User JOIN Office ON User.id = Office.id JOIN Places ON User.id = Places.id")
fun getAllUserOfficePlacesCombined(): UserOfficePlacesCombined
- Примечание, чтобы обойти неопределенности, все столбцы были переименованы с использованием ключевого слова AS
- Если вопрос не указываетотношения между таблицами, как таковой, запрос объединит таблицы в соответствии с их столбцом id.
- маловероятно, что это будет иметь какое-либо применение в приложении, но было сделано из-за недостатка информации и для удобства.
это вместе в качестве примера, сделав некоторые предположения, затем рассмотрим следующую демонстрацию: -
val userOfficePlacesDoa = db.userOfficePlacesDao()
val user1 = User(1,"USER1")
val office1 = Office(1,"Office1")
val places1 = Places(1,"Place1")
userOfficePlacesDoa.insertUser(user1)
userOfficePlacesDoa.insertOffice(office1)
userOfficePlacesDoa.insertPlaces(places1)
var uopc: UserOfficePlacesCombined = userOfficePlacesDoa.getAllUserOfficePlacesCombined()
Log.d("UOPCINFO","User Name is " + uopc.user?.name + " Office Address is" + uopc.office?.address + " Places name is " + uopc.places?.name)
В результате получим: -
2019-10-16 22:35:16.442 D/UOPCINFO: User Name is USER1 Office Address isOffice1 Places name is Place1