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 class
MovieDAOImpl.DateParam
protected static class
MovieDAOImpl.Pair<T,U>
private class
MovieDAOImpl.QueryLogger<T>
-
Field Summary
Fields Modifier and Type Field Description private EntityManager
em
private static org.slf4j.Logger
log
-
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.int
getCastCountForMovie(String movieId)
Person
getKevinBacon()
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)
Movie
getMovieById(String id)
Movie
getMovieByIdUnfetched(String id)
int
getMovieCastCountByDAO(String movieId)
int
getMovieCastCountByDAORelation(String movieId)
int
getMovieCastCountByDB(String movieId)
Movie
getMovieFetchedByIdFetched(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)
void
setEntityManager(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)
-
-