如果一个用户只能属于一个组,则 user:group 是多对一关系。
@Entity(tableName="user")
data class UserEntity(
@PrimaryKey(autoGenerate = true)
val uid: Int,
val username: String,
val groupId: Int
...
)
@Entity(tableName="group")
data class GroupEntity(
@PrimaryKey(autoGenerate = true)
val gid: Int,
val name: String,
)
我可以使用 POJO 和左连接进行查询,如下所示:
data class UserWithGroup(
@Embedded
val user: UserEntity,
@Embedded
val group: GroupEntity,
)
@Dao
interface UserDao {
@Transaction
@Query("SELECT * FROM `user` u LEFT JOIN `group` g ON u.group_id = g.id")
fun getAllUserWithGroup(): List<UserWithGroup>
}
是否可以在 UserWithGroup 中使用 @Relation 来获取具有组的用户?似乎互联网上的大多数示例都是获取包含用户列表的组,如何获取具有 @Relation 关联组的用户,如下面的代码?
data class UserWithGroup(
@Embedded
val user: UserEntity,
@Relation(
parentColumn = "gid",
entityColumn = "groupId",
)
val group: GroupEntity
)
@Dao
interface UserDao {
@Transaction
@Query("SELECT * FROM `user`")
fun getAllUserWithGroup(): List<UserWithGroup>
}
我认为您的问题是您正在编码,就好像组是用户的父级一样,而不是使用用户作为组的父级进行编码。所以:-
data class UserWithGroup(
@Embedded
val user: UserEntity,
@Relation(
entity = GroupEntity::class,
parentColumn = "groupId",
entityColumn = "gid",
)
val group: GroupEntity
)
entity=GroupEntity::class
是可选的,但建议这样做,因为如果@Relation
的输出类型不是表(因为如果层次结构大于2个级别,它可以/将会是) .