我的问题涉及房间和桌子。
我有一个名为movie
的POJO,此POJO包含title
,image
,overview
,releaseDate
和rating
。
movie
被输入为@Entity(tableName = movie_table)
,此表格包含由http调用查询的最受欢迎的电影:/movie/popular
端点,我被要求使用过滤器按钮从最受欢迎的电影切换到最受欢迎的电影,第二个过滤器使用另一个http调用:/movie/top_rated
端点。基于此我需要不同的表,可能有一个叫做most_popular_movies
,另一个名为top_rated_movies
。如何只使用一个实体来实现这一目标?我需要复制movie
POJO吗?或者是否有另一种使用这两种不同的http调用实现此过滤的方法?
非常感谢!!
答案 0 :(得分:1)
无需创建多个表。您可以在表格中再添加两列,即rank_most_popular
和rank_top_rated
。然后,当您获取大多数热门电影时,您将使用您指定的排名将它们插入到数据库中。然后,当您获取评分最高的电影时,您只需将新电影插入数据库并更新已分配最高评级排名的现有电影。然后,您可以编写查询以过滤所需的查询。这些方面的东西。
实体类
@Entity(tableName = "movie_table")
public class MovieEntity {
@PrimaryKey
private long id;
private int topRatedRank;
private int mostPopularRank;
// Other fields...
}
Dao班
@Dao
public interface MovieDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(MovieEntity movie);
@Update
int update(MovieEntity entity);
@Query("SELECT * FROM movie_table WHERE mostPopularRank <> -1 ORDER BY mostPopularRank ASC LIMIT :count")
List<MovieEntity> getMostPopular(int count);
@Query("SELECT * FROM movie_table WHERE topRatedRank <> -1 ORDER BY topRatedRank ASC LIMIT :count")
List<MovieEntity> getTopRated(int count);
@Query("SELECT * FROM movie_table WHERE :id = id")
MovieEntity getById(long id);
}
当你收到电影时,你只需为每部电影分配一个等级(类似于最高评级)
public void mostPopularReceived(List<MovieEntity> mostPopular) {
for (int i = 0; i < mostPopular.size(); i++) {
MovieEntity movie = mostPopular.get(i);
MovieEntity dbMovie = movieDao.getById(movie.getId());
if (dbMovie == null) {
movie.setMostPopularRank(i);
movieDao.insert(movie);
} else {
dbMovie.setMostPopularRank(i);
movieDao.update(dbMovie);
}
}
}