数据库
首页 > 数据库> > java-SQLite:如何从subQuery填充pojo上的布尔字段

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