java-SQLite:如何从subQuery填充pojo上的布尔字段
作者:互联网
我想返回类似的帖子列表.
@Query("SELECT * FROM posts")
List<Post> getPosts()
我有一个pojo.
post {
name:String
id :String
postUid:String
userHasNewContent:Boolean
}
现在,我希望列表中的每个帖子都具有userHasNewContent:Boolean,通过检查拥有此帖子的用户是否具有新内容来填充(不超过一周)
所以我尝试了.
@Query("SELECT *,
(SELECT content_uid FROM content WHERE content_uid = postUid AND
contentTime < :aWeekAgo)AS userHasNewContent
FROM posts")
List<Post> getPosts(String aWeekAgo)
内容是:
内容{
contentTime:Long // Unix时间戳
id:字符串
}
和
public static Long aWeekAgo() {
long day = (1000 * 60) * 60 * 24;
return System.currentTimeMillis() - day * 7;
}
这似乎未达到预期的效果,我是否正在这样做?
编辑
好的,写完问题后,现在很清楚我想做什么.这是简短的版本.
//Get all posts
@Query("SELECT * FROM posts")
List<Post> getPosts()
//Then loop through them.
@Query("SELECT count(*) FROM content WHERE contentId :contentUID AND soundTime < : aWeekAgo")
int checkIfUserHasNewContent(String uid, long aWeekAgo);
List<Post> postsWithNewContentIndicator = new ArrayList<>();
for (Post post : postsFromDb) {
post.userHasNewContent(checkIfUserHasNewContent(post.getUid()) > 0);
postsWithNewContentIndicator.add(post);
}
因此,但是我想通过一个查询来执行此操作,而不要使用此循环.
解决方法:
您需要按以下方式重写查询
SELECT
*,
(
(
SELECT
COUNT(*)
FROM
(
SELECT
content_uid
FROM
content
WHERE
content_uid = postUid
AND contentTime > : aWeekAgo
)
)> 0
) AS userHasNewContent
FROM
posts
标签:android-room,sqlite,sql,java,android 来源: https://codeday.me/bug/20191108/2007425.html