房间一对多关系与两个表上的条件

问题描述 投票:0回答:1

我正在尝试按照 Android Room 培训使用一对多关系来实现 Room 数据库(https://developer.android.com/training/data-storage/room/relationships#one-to-many )。

但是,我找不到在第二个表上添加条件的方法。

例如,要获取所有 UserWithPlaylists,对于 25 岁以上且播放列表名称以“play”开头的用户,这是行不通的,因为 Room 不会自动对结果进行分组(并且

GROUP BY
子句会阻止创建播放列表列表):

@Transaction
@Query("SELECT User.* FROM User, Playlist WHERE User.age > 25 AND Playlist.playlistName LIKE play%")
public List<UserWithPlaylists> getUsersWithPlaylistsSpecific();

我已经尝试过一些解决方案,例如将一个实体嵌入另一个实体并使用

@Embedded(prefix = "PETS_")
正如这里建议的:https://stackoverflow.com/a/50698610但没有成功。
我还想避免使用 Java Map 此方法

我怎样才能实现这个目标?

android database android-room androidx android-jetpack
1个回答
0
投票
查询时,

@DatabaseView
的工作方式与普通
@Entity
类似。所以你可以:

@DatabaseView("""
  SELECT * FROM Playlist
  WHERE Playlist.playlistName LIKE play%
""" )
data class Playlist2(...)

data class UserWithPlaylist2s(
  @Embed
  val user: User
  @Relation(...)
  val playlists: List<Playlist2>
)

但是不方便的是

@DatabaseView
中不能添加参数。这样第二张表的查询条件一定是一个编译时间常数。

© www.soinside.com 2019 - 2024. All rights reserved.