Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android Room交叉引用实体中查询数据以获取特殊的;“多对多关系”;用例?_Android_Database_Nested_Relationship_Android Room - Fatal编程技术网

如何在Android Room交叉引用实体中查询数据以获取特殊的;“多对多关系”;用例?

如何在Android Room交叉引用实体中查询数据以获取特殊的;“多对多关系”;用例?,android,database,nested,relationship,android-room,Android,Database,Nested,Relationship,Android Room,我按照android开发指南定义了房间多对多关系: 数据类播放列表( @PrimaryKey val播放列表ID:长, 名称:字符串 ) @实体 数据类歌曲( @PrimaryKey val songId:Long, val songName:String, 瓦尔艺术家:弦 ) @实体(primaryKeys=[“播放列表ID”,“歌曲ID”]) 数据类交叉引用( val-playlid:Long, 瓦尔·松吉德:很长 ) 数据类播放歌曲( @嵌入式val播放列表:播放列表, @关系( par

我按照android开发指南定义了房间多对多关系:

数据类播放列表(
@PrimaryKey val播放列表ID:长,
名称:字符串
)
@实体
数据类歌曲(
@PrimaryKey val songId:Long,
val songName:String,
瓦尔艺术家:弦
)
@实体(primaryKeys=[“播放列表ID”,“歌曲ID”])
数据类交叉引用(
val-playlid:Long,
瓦尔·松吉德:很长
)
数据类播放歌曲(
@嵌入式val播放列表:播放列表,
@关系(
parentColumn=“playlyid”,
entityColumn=“songId”,
associateBy=@Junction(播放列表SongCrossRef::class)
)
val歌曲:列表
)
//刀
@交易
@查询(“从播放列表中选择*)
趣味GetPlaylistWithSongs():列表
以上方法很好。但是,我还想根据歌曲所属的播放列表保存歌曲的声音属性(即基本音量…)。对于同一首歌曲,在“派对”播放列表中音量较高,在“冷却”播放列表中音量较低。与同一播放列表类似,某些歌曲的音量较高,而其他歌曲的音量较低

因此,我更改了上面的播放列表SongCrossRef并添加了Dao,如下所示:

@Entity(table="playlistSongCrossRef", primaryKeys = ["playlistId", "songId"])
data class PlaylistSongCrossRef(
    val playlistId: Long,
    val songId: Long,
    val baseVolume: Double
)

data class PlaylistWithSongs(
    @Embedded val playlist: Playlist,
    @Relation(
         parentColumn = "playlistId",
         entityColumn = "songId",
         associateBy = Junction(PlaylistSongCrossRef::class)
    )
    val songs: List<Song>
    @Relation(
         parentColumn = "playlistId",
         entityColumn = "baseVolume",
         associateBy = Junction(PlaylistSongCrossRef::class)
    )
    val baseVolumes: List<PlaylistSongCrossRef>
)

// Dao
@Query("SELECT * FROM Playlist WHERE playlistId = :playlistId ")
fun getPlaylistsWithSongs(playlistId: Int): List<PlaylistWithSongs>
@Entity(table=“playlysongcrossref”,primaryKeys=[“playlyid”,“songId]”)
数据类交叉引用(
val-playlid:Long,
瓦尔·松吉德:很长,
val基本卷:双
)
数据类播放歌曲(
@嵌入式val播放列表:播放列表,
@关系(
parentColumn=“playlyid”,
entityColumn=“songId”,
associateBy=Junction(交叉引用::类)
)
val歌曲:列表
@关系(
parentColumn=“playlyid”,
entityColumn=“baseVolume”,
associateBy=Junction(交叉引用::类)
)
val基本卷:列表
)
//刀
@查询(“从播放列表中选择*,其中playlid=:playlid”)
趣味GetPlaySwithSongs(playliID:Int):列表
但是,dao查询没有按预期工作。当相同的baseVolume存储在不同的交叉引用对中时,查询将返回重复的条目


我不确定这是否是dao中的错误查询,或者我需要重新设计房间数据库结构。提前非常感谢

@DevrimTuncer很抱歉打扰您,但我已经看到您对类似问题的评论,如果您能提供任何建议,我将不胜感激help@DevrimTuncer很抱歉打扰您,但我已经看到您对类似问题的最重要评论,如果您能提供任何帮助,我将不胜感激
@Entity(table="playlistSongCrossRef", primaryKeys = ["playlistId", "songId"])
data class PlaylistSongCrossRef(
    val playlistId: Long,
    val songId: Long,
    val baseVolume: Double
)

data class PlaylistWithSongs(
    @Embedded val playlist: Playlist,
    @Relation(
         parentColumn = "playlistId",
         entityColumn = "songId",
         associateBy = Junction(PlaylistSongCrossRef::class)
    )
    val songs: List<Song>
    @Relation(
         parentColumn = "playlistId",
         entityColumn = "baseVolume",
         associateBy = Junction(PlaylistSongCrossRef::class)
    )
    val baseVolumes: List<PlaylistSongCrossRef>
)

// Dao
@Query("SELECT * FROM Playlist WHERE playlistId = :playlistId ")
fun getPlaylistsWithSongs(playlistId: Int): List<PlaylistWithSongs>