我正在尝试按照 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但没有成功。我怎样才能实现这个目标?
@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
中不能添加参数。这样第二张表的查询条件一定是一个编译时间常数。