我的数据库中有九个相关表。我必须在过滤用户请求后检索记录。
我的实体如下,
电影
@Entity
@Table(name = "movie")
public class Movie implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "movie_id")
private int movieId;
@Column(name = "category_id")
private Integer categoryId;
@Column(name = "movie_title")
private String movieTitle;
@Column(name = "movie_description", columnDefinition = "TEXT")
private String movieDescription;
@Column(name = "movie_summary", columnDefinition = "TEXT")
private String movieSummary;
private Integer status;
@Column(name = "language_id")
private Integer languageId;
@Column(name = "banner_image_url")
private String bannerImageUrl;
@Column(name = "imdb_rating")
private Integer imdbRating;
@Column(name = "rotten_tomatoes_rating")
private Integer rottenTomatoesRating;
@Column(name = "user_avg_rating")
private Float userAvgRating;
@Column(name = "main_genre_id")
private Integer mainGenreId;
@Column(name = "secondary_genre_id")
private Integer secondaryGenreId;
@Column(name = "created_by_user_id")
private Integer createdByUserId;
}
分类
@Entity
@Table(name = "category")
public class FetchSubCategory implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "category_id")
private Integer categoryId;
@Column(name = "category_name")
private String categoryName;
}
MovieActorMapping
@Entity
@Table(name = "movie_actor_mapping")
public class MovieActorMapping implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "mapping_id")
private int mappingId;
@Column(name = "movie_id")
private Integer movieId;
@Column(name = "actor_id")
private Integer actorId;
}
MovieActors
@Entity
@Table(name = "movie_actors")
public class MovieActors implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "actor_id")
private int actorId;
@Column(name = "actor_name")
private String actorName;
}
MovieGenre
@Entity
@Table(name = "movie_genre")
public class MovieGenre implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "genre_id")
private int genreId;
@Column(name = "genre_name")
private String genreName;
@Column(name = "created_by_user_id")
private Integer createdByUserId;
}
MovieLanguage
@Entity
@Table(name = "movie_language")
public class MovieLanguage implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "language_id")
private int languageId;
@Column(name = "language_name")
private String languageName;
@Column(name = "created_by_user_id")
private Integer createdByUserId;
@Column(name = "last_updated_user_id")
private Integer lastUpdatedUserId;
}
用户将请求如下.all是可选字段,
{
"subCategory":"New Release",
"language":"Malayalam",
"actor":"allu arjun",
"filmGenre":"'Family'"
}
根据请求,我将通过使用子查询检查相应表中的条件来返回movie
列表。
方法
public List<Movie> getFilterMovieList(FilterMovieRequest filterMovieRequest) throws SQLException, ClassNotFoundException, IOException {
List<Movie> movies = null;
try {
String subCategory = filterMovieRequest.getSubCategory();
String language = filterMovieRequest.getLanguage();
String actor = filterMovieRequest.getActor();
String filmGenre = filterMovieRequest.getFilmGenre();
String contained = "where";
String sql = "from Movie as M ";
if (actor.length() > 1) {
sql += contained + " movieId in(select movieId from MovieActorMapping where actorId in(select actorId from MovieActors where actorName='" + actor + "')) ";
contained = "and";
}
if (subCategory.length() > 1) {
sql += contained + " M.categoryId=(select categoryId from FetchSubCategory where categoryName='" + subCategory + "') ";
contained = "and";
}
if (language.length() > 1) {
sql += contained + " M.languageId=(select languageId from MovieLanguage where languageName='" + language + "') ";
contained = "and";
}
if (filmGenre.length() > 1) {
sql += contained + " (M.mainGenreId in(select genreId from MovieGenre where genreName in(" + filmGenre + ")) or M.secondaryGenreId in(select genreId from MovieGenre where genreName in(" + filmGenre + ")))";
contained = "and";
}
if (contained.equals("and")) {
Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery(sql);
movies = query.list();
}
} catch (Exception e) {
e.printStackTrace();
}
return movies;
}
它运作正常。问题是现在我必须结合影院电影播放的结果和播放时间。
我的影院相关表格如下,
theater_movie_mapping
show_timings
您可以在movie_id
的{{1}}列中看到与我的基本表theater_movie_mapping
相关的内容。使用它我们可以获取movie
和theater_id
来获取影院并显示时间。注意我在检查上述条件后提前获取了一个电影列表。我如何组合来自 theater_list <的影院/ strong>并显示来自 show_timings 的时间?作为一个Android开发者,它对我来说似乎很复杂。完全被困了。任何帮助将不胜感激。使用show_id
。
现在我得到了以下格式的结果,
Spring restful webservice
我必须在每个json对象中添加剧院并显示时间,即每部电影..
答案 0 :(得分:0)
假设theater_movie_mapping已映射到其中包含Class TheaterMovie
的{{1}}
Movie movie
现在假设show_timings已映射到其中包含ArrayList<TheaterMovie> list = new ArrayList<TheaterMovie>();
for(int i = 0 ; i < movies.size() ; i++){
list.addAll((ArrayList<TheaterMovie>)createQuery("From TheaterMovie tm where tm.movies = :mo").setParameter("mo",movies.get(i)).getList());
}
的{{1}}
Class ShowTiming
我希望这对你有用