gpt4 book ai didi

android - 如何使用CrossRef Junction在Android Room中建立多对多关系模型

转载 作者:行者123 更新时间:2023-12-02 13:44:25 30 4
gpt4 key购买 nike

https://developer.android.com/training/data-storage/room/relationships#many-to-many中所述,我如何建模多对多关系,但在结点上具有附加属性?我基本上想实现以下目标:

@Entity
data class Playlist(
@PrimaryKey val playlistId: Long,
val playlistName: String
)

@Entity
data class Song(
@PrimaryKey val songId: Long,
val songName: String,
val artist: String
)

@Entity(primaryKeys = ["playlistId", "songId"])
data class PlaylistSongCrossRef(
val playlistId: Long,
val songId: Long,
val rating: Int // <-- the additional property
)

data class PlaylistWithRating(
val playlist: Playlist,
val rating: Int // <-- the additional property
)

data class SongWithPlaylists(
@Embedded val song: Song,
@Relation(
parentColumn = "songId",
entityColumn = "playlistId",
associateBy = @Junction(PlaylistSongCrossRef::class)
)
val playlists: List<PlaylistWithRating>
)

所以我可以在我的Dao中访问它:
@Dao
interface SongWithPlaylistsDao {
@Query("SELECT * FROM Song")
fun list(): LiveData<List<SongWithPlaylists>>
}

我知道从ERM Angular 来看,您将如何建立这种关系的模型,如下所示:
/-- A ---\      /- ACrossB -\            /-- B ---\
| | | | | |
| - id |----->| - aId | |------| - id |
| - name | | - bId |-----| | -name |
| | | - prop | | |
\--------/ \-----------/ \--------/

我也知道如何使用 JOIN查询这种关系,但是无法从文档中找出如何在Room中做到这一点,同时保持数据完整性。

最佳答案

你尝试过这个吗?

@实体
数据类PlaylistSongCrossRef(
val playlistId:长,
val songId:长,

 @PrimaryKey(autoGenerate = true)
val rating: Int // <-- the additional property

)

注意:我不确定在kotlin中声明主要语言的方式,我是Java开发者。
但是你有主意。
交界处仍然有效,尽管您可以将同一首歌曲的许多关联与唯一的评级区分开。

关于android - 如何使用CrossRef Junction在Android Room中建立多对多关系模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60287059/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com