Android Room - не поддерживает вложенные классы сущностей, но поддерживает @Embedded.Какая разница? - PullRequest
0 голосов
/ 28 декабря 2018

Как указано в документации:

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 таким образом. Как я понимаю, у меня есть три варианта:

  1. Я могу использовать TypeConverter и сказать ему, как поставить Addressв один столбец, и как вынуть его из указанного столбца.Con: Я теряю легкие запросы к этому полю, так как оно по существу сериализовано.

  2. Я могу аннотировать свой класс Address с помощью @Entity.Это выглядит как дополнительные издержки, поскольку у меня теперь есть другая таблица с Address es, и мне нужно управлять внешним ключом / ссылочной целостностью.

  3. Я могу пометить каждый вложенный объект как@Embedded.Это то, с чем я не знаком, но мне кажется, что это простой способ сохранить объект так, как я считаю нужным, и мне не нужно управлять внешними связями.Кажется, я не могу найти никаких «реальных» минусов, и прежде чем я реализую это в нескольких местах, мне интересно, какова разница между использованием @Embedded и наличием вложенного класса Entity через ForeignKey.«Иногда вы хотели бы выразить сущность или простой старый Java-объект (POJO) как единое целое в логике вашей базы данных, даже если объект содержит несколько полей».https://developer.android.com/training/data-storage/room/defining-data#nested-objects

Кроме того, я упускаю какие-либо потенциальные варианты для моего сценария?Это все, что я мог найти в документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...