Something I just discovered is that @Embedded fields in Room entities can themselves contain @Embedded fields. For example:
data class Post(
@Embedded
val media: Media
)
data class Media(
@Embedded
val metadata: Metadata
)
data class Metadata(
val resolution: String
)
works as you would expect, with resolution being pulled up to the Post entity table. Not sure how deeply @Embedded you can go, or if there are any performance consequences to this, but a neat trick!