Как указано в документации:
https://developer.android.com/training/data-storage/room/referencing-data#understand-no-object-references
Комната запрещает ссылки на объекты между классами сущностей.Вместо этого вы должны явно запросить данные, которые нужны вашему приложению.
У меня есть много сценариев, подобных приведенным ниже:
@Entity
data class User(
@PrimaryKey var id: Int,
var firstName: String?,
var address: Address?
)
data class Address(
var street: String?,
var state: String?,
var city: String?
)
Теперь я не могупросто добавьте туда Address таким образом. Как я понимаю, у меня есть три варианта:
Я могу использовать TypeConverter
и сказать ему, как поставить Address
в один столбец, и как вынуть его из указанного столбца.Con: Я теряю легкие запросы к этому полю, так как оно по существу сериализовано.
Я могу аннотировать свой класс Address
с помощью @Entity
.Это выглядит как дополнительные издержки, поскольку у меня теперь есть другая таблица с Address
es, и мне нужно управлять внешним ключом / ссылочной целостностью.
Я могу пометить каждый вложенный объект как@Embedded
.Это то, с чем я не знаком, но мне кажется, что это простой способ сохранить объект так, как я считаю нужным, и мне не нужно управлять внешними связями.Кажется, я не могу найти никаких «реальных» минусов, и прежде чем я реализую это в нескольких местах, мне интересно, какова разница между использованием @Embedded
и наличием вложенного класса Entity через ForeignKey.«Иногда вы хотели бы выразить сущность или простой старый Java-объект (POJO) как единое целое в логике вашей базы данных, даже если объект содержит несколько полей».https://developer.android.com/training/data-storage/room/defining-data#nested-objects
Кроме того, я упускаю какие-либо потенциальные варианты для моего сценария?Это все, что я мог найти в документации.