Package ejava.jpa.examples.tuning.dao
Class MovieDAOImpl
- java.lang.Object
-
- ejava.jpa.examples.tuning.dao.MovieDAOImpl
-
public class MovieDAOImpl extends Object
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private classMovieDAOImpl.DateParamprotected static classMovieDAOImpl.Pair<T,U>private classMovieDAOImpl.QueryLogger<T>
-
Field Summary
Fields Modifier and Type Field Description private EntityManageremprivate static org.slf4j.Loggerlog
-
Constructor Summary
Constructors Constructor Description MovieDAOImpl()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected <T> MovieDAOImpl.QueryLogger<T>createQuery(String jpaql, Class<T> resultClass)Helper method to log the JPAQL portion of the query.intgetCastCountForMovie(String movieId)PersongetKevinBacon()Returns a Person instance for the Kevin Bacon actor who played in Tremors.List<String>getKevinBaconMovieIds(Integer offset, Integer limit, String orderBy)List<Object[]>getMovieAndDirector(Integer offset, Integer limit, String orderBy)MoviegetMovieById(String id)MoviegetMovieByIdUnfetched(String id)intgetMovieCastCountByDAO(String movieId)intgetMovieCastCountByDAORelation(String movieId)intgetMovieCastCountByDB(String movieId)MoviegetMovieFetchedByIdFetched(String id)List<Movie>getMovies(Integer offset, Integer limit, String orderBy)Returns a bulk, unordered page of movies.List<Movie>getMoviesByLikeRole(String role, Integer offset, Integer limit, String orderBy)List<Movie>getMoviesByRatingLowerFunction(MovieRating rating, Integer offset, Integer limit)Returns an unordered page of movies matching the supplied rating -- but calling lower() on the DB value.List<Movie>getMoviesByRatingUpperFunction(MovieRating rating, Integer offset, Integer limit)Returns an unordered page of movies matching the supplied rating -- but calling upper() on the DB value.List<Movie>getMoviesByRatingValue(MovieRating rating, Integer offset, Integer limit, String orderBy)Returns an unordered page of movies matching the supplied rating -- without calling any function()s on the stored data.List<Movie>getMoviesByReleaseDate(Date releaseDate, Integer offset, Integer limit)List<Movie>getMoviesByReleaseDateAndRating(Date releaseDate, MovieRating rating, Integer offset, Integer limit)List<Movie>getMoviesByReleaseDateAndTitle(String title, Date releaseDate, Integer offset, Integer limit)List<Movie>getMoviesByRole(String role, Integer offset, Integer limit, String orderBy)List<Movie>getMoviesByTitleAndReleaseDate(String title, Date releaseDate, Integer offset, Integer limit)List<Movie>getMoviesByTitleAndReleaseDateAndRating(String title, Date releaseDate, MovieRating rating, Integer offset, Integer limit)List<Movie>getMoviesEqualsTitle(String title, Integer offset, Integer limit)Returns movies exactly matching the provided title.protected MovieDAOImpl.Pair<Subquery<Movie>,Void>getMoviesForPerson(AbstractQuery<String> parentQuery, Person person)protected MovieDAOImpl.Pair<Subquery<Movie>,Join<Actor,Person>>getMoviesForPersonIds(AbstractQuery<String> parentQuery)List<Movie>getMoviesLikeTitle(String title, Integer offset, Integer limit, String orderBy)Returns an unordered page of movies that have a title "like" the one passed in.protected CriteriaQuery<Person>getPeopleQuery(Person person, int steps)protected CriteriaQuery<Person>getPeopleQuery2(Person person, int steps)protected MovieDAOImpl.Pair<Subquery<String>,Join<MovieRole,Movie>>getPersonIdsInMovie(AbstractQuery<?> parentQuery)List<String>getRatingsByTitle(String title, Integer offset, Integer limit, String orderBy)Returns a list of ratings for movies that exactly match the provided title.List<String>getRatingsLikeTitle(String title, Integer offset, Integer limit, String orderBy)Returns ratings that match the title like criteria.List<MovieRole>getRolesByMovie(String title, Date releaseDate, Integer offset, Integer limit, String orderBy)List<String>getTitlesByRating(MovieRating rating, Integer offset, Integer limit)Returns an unordered page of titles that match a specified rating.protected MovieDAOImpl.Pair<Subquery<String>,Join<MovieRole,Movie>>nthRemoved(AbstractQuery<String> parentQuery, Path<Movie> parentTerm, Person person)List<Person>oneStepFromPerson0(Person p, Integer offset, Integer limit)Find people who are 1 step from Kevin Bacon.Collection<Person>oneStepFromPersonByDAO(Person p)Find people who are 1 step from Person.Collection<Person>oneStepFromPersonByDAO(Person p, Integer offset, Integer limit, String orderBy)List<Person>oneStepFromPersonByDB(Person p)Find people who are 1 step from Person.List<Person>oneStepFromPersonByDB(Person p, Integer offset, Integer limit, String orderBy)voidsetEntityManager(EntityManager em)List<Person>stepsFromPerson(Person person, int steps, Integer offset, Integer limit)protected <T> MovieDAOImpl.QueryLogger<T>withPaging(MovieDAOImpl.QueryLogger<T> query, Integer offset, Integer limit, String orderBy)Helper method to add paging parameters to a query
-
-
-
Field Detail
-
log
private static final org.slf4j.Logger log
-
em
private EntityManager em
-
-
Method Detail
-
setEntityManager
public void setEntityManager(EntityManager em)
-
createQuery
protected <T> MovieDAOImpl.QueryLogger<T> createQuery(String jpaql, Class<T> resultClass)
Helper method to log the JPAQL portion of the query.- Parameters:
jpaql-resultClass-- Returns:
-
withPaging
protected <T> MovieDAOImpl.QueryLogger<T> withPaging(MovieDAOImpl.QueryLogger<T> query, Integer offset, Integer limit, String orderBy)
Helper method to add paging parameters to a query- Parameters:
query-offset-limit-- Returns:
-
getKevinBacon
public Person getKevinBacon()
Returns a Person instance for the Kevin Bacon actor who played in Tremors.- Returns:
-
getKevinBaconMovieIds
public List<String> getKevinBaconMovieIds(Integer offset, Integer limit, String orderBy)
-
oneStepFromPerson0
public List<Person> oneStepFromPerson0(Person p, Integer offset, Integer limit)
Find people who are 1 step from Kevin Bacon.- Parameters:
p-offset-limit-- Returns:
-
oneStepFromPersonByDAO
public Collection<Person> oneStepFromPersonByDAO(Person p)
Find people who are 1 step from Person.- Parameters:
p-offset-limit-orderBy-- Returns:
-
oneStepFromPersonByDAO
public Collection<Person> oneStepFromPersonByDAO(Person p, Integer offset, Integer limit, String orderBy)
-
oneStepFromPersonByDB
public List<Person> oneStepFromPersonByDB(Person p)
Find people who are 1 step from Person.- Parameters:
p-offset-limit-orderBy-- Returns:
-
oneStepFromPersonByDB
public List<Person> oneStepFromPersonByDB(Person p, Integer offset, Integer limit, String orderBy)
-
getMoviesForPerson
protected MovieDAOImpl.Pair<Subquery<Movie>,Void> getMoviesForPerson(AbstractQuery<String> parentQuery, Person person)
-
getMoviesForPersonIds
protected MovieDAOImpl.Pair<Subquery<Movie>,Join<Actor,Person>> getMoviesForPersonIds(AbstractQuery<String> parentQuery)
-
getPersonIdsInMovie
protected MovieDAOImpl.Pair<Subquery<String>,Join<MovieRole,Movie>> getPersonIdsInMovie(AbstractQuery<?> parentQuery)
-
nthRemoved
protected MovieDAOImpl.Pair<Subquery<String>,Join<MovieRole,Movie>> nthRemoved(AbstractQuery<String> parentQuery, Path<Movie> parentTerm, Person person)
-
getPeopleQuery2
protected CriteriaQuery<Person> getPeopleQuery2(Person person, int steps)
-
getPeopleQuery
protected CriteriaQuery<Person> getPeopleQuery(Person person, int steps)
-
stepsFromPerson
public List<Person> stepsFromPerson(Person person, int steps, Integer offset, Integer limit)
-
getMovies
public List<Movie> getMovies(Integer offset, Integer limit, String orderBy)
Returns a bulk, unordered page of movies. This will cause a full table scan since there is no reason to consult the index.- Parameters:
offset-limit-orderBy-- Returns:
-
getMoviesByRatingUpperFunction
public List<Movie> getMoviesByRatingUpperFunction(MovieRating rating, Integer offset, Integer limit)
Returns an unordered page of movies matching the supplied rating -- but calling upper() on the DB value. This will cause an index to be bypassed except for an upper() function index.- Parameters:
rating-offset-limit-- Returns:
-
getMoviesByRatingLowerFunction
public List<Movie> getMoviesByRatingLowerFunction(MovieRating rating, Integer offset, Integer limit)
Returns an unordered page of movies matching the supplied rating -- but calling lower() on the DB value. This will cause an index to be bypassed except for a lower() function index.- Parameters:
rating-offset-limit-- Returns:
-
getMoviesByRatingValue
public List<Movie> getMoviesByRatingValue(MovieRating rating, Integer offset, Integer limit, String orderBy)
Returns an unordered page of movies matching the supplied rating -- without calling any function()s on the stored data. If the column contains an index, it will be used.- Parameters:
rating-offset-limit-orderBy-- Returns:
-
getMoviesLikeTitle
public List<Movie> getMoviesLikeTitle(String title, Integer offset, Integer limit, String orderBy)
Returns an unordered page of movies that have a title "like" the one passed in. Note the difference in index behavior when there is a wildcard at the beginning or end of the searched title- Parameters:
title-offset-limit-orderBy-- Returns:
-
getMoviesEqualsTitle
public List<Movie> getMoviesEqualsTitle(String title, Integer offset, Integer limit)
Returns movies exactly matching the provided title.- Parameters:
title-offset-limit-- Returns:
-
getRatingsByTitle
public List<String> getRatingsByTitle(String title, Integer offset, Integer limit, String orderBy)
Returns a list of ratings for movies that exactly match the provided title.- Parameters:
title-offset-limit-orderBy-- Returns:
-
getRatingsLikeTitle
public List<String> getRatingsLikeTitle(String title, Integer offset, Integer limit, String orderBy)
Returns ratings that match the title like criteria.- Parameters:
title-offset-limit-orderBy-- Returns:
-
getTitlesByRating
public List<String> getTitlesByRating(MovieRating rating, Integer offset, Integer limit)
Returns an unordered page of titles that match a specified rating. This query will be impacted by a presence of an index on the rating column and the presence of the title column with the rating column as a part of a composite index.- Parameters:
rating-offset-limit-- Returns:
-
getMoviesByTitleAndReleaseDate
public List<Movie> getMoviesByTitleAndReleaseDate(String title, Date releaseDate, Integer offset, Integer limit)
-
getMoviesByReleaseDateAndTitle
public List<Movie> getMoviesByReleaseDateAndTitle(String title, Date releaseDate, Integer offset, Integer limit)
-
getMoviesByTitleAndReleaseDateAndRating
public List<Movie> getMoviesByTitleAndReleaseDateAndRating(String title, Date releaseDate, MovieRating rating, Integer offset, Integer limit)
-
getMoviesByReleaseDate
public List<Movie> getMoviesByReleaseDate(Date releaseDate, Integer offset, Integer limit)
-
getMoviesByReleaseDateAndRating
public List<Movie> getMoviesByReleaseDateAndRating(Date releaseDate, MovieRating rating, Integer offset, Integer limit)
-
getMoviesByRole
public List<Movie> getMoviesByRole(String role, Integer offset, Integer limit, String orderBy)
-
getMoviesByLikeRole
public List<Movie> getMoviesByLikeRole(String role, Integer offset, Integer limit, String orderBy)
-
getRolesByMovie
public List<MovieRole> getRolesByMovie(String title, Date releaseDate, Integer offset, Integer limit, String orderBy)
-
getMovieCastCountByDAORelation
public int getMovieCastCountByDAORelation(String movieId)
-
getMovieCastCountByDAO
public int getMovieCastCountByDAO(String movieId)
-
getMovieCastCountByDB
public int getMovieCastCountByDB(String movieId)
-
getCastCountForMovie
public int getCastCountForMovie(String movieId)
-
-