Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public List<Book> multiCriteriaSearch(BookMultiCriteriaForm searchCriterias) {
- CriteriaQuery<Book> bookCriteriaQuery = createMultiCriteriaSearchBooksCriteriaQuery(searchCriterias);
- return runCriteriaQuery(bookCriteriaQuery);
- }
- private CriteriaQuery<Book> createMultiCriteriaSearchBooksCriteriaQuery(BookMultiCriteriaForm searchCriterias) {
- CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
- CriteriaQuery<Book> bookCriteriaQuery = criteriaBuilder.createQuery(Book.class);
- Root<Book> bookRoot = bookCriteriaQuery.from(Book.class);
- Join<Book, Category> joinCategory = bookRoot.join("categories");
- Join<Book, Author> joinAuthor = bookRoot.join("authors");
- List<Predicate> predicates = new ArrayList<Predicate>();
- if (searchCriterias.getISBN() != null && !searchCriterias.getISBN().isEmpty()) {
- predicates.add(
- criteriaBuilder.like(bookRoot.<String>get("ISBN"), searchCriterias.getISBN()));
- }
- if (searchCriterias.getBookName() != null && !searchCriterias.getBookName().isEmpty()) {
- predicates.add(
- criteriaBuilder.like(bookRoot.<String>get("name"), searchCriterias.getBookName()));
- }
- if (searchCriterias.getAuthorName() != null && !searchCriterias.getAuthorName().isEmpty()) {
- predicates.add(
- criteriaBuilder.equal(joinAuthor.get("name"), searchCriterias.getAuthorName()));
- }
- if (searchCriterias.getCategoryName() != null && !searchCriterias.getCategoryName().isEmpty()) {
- predicates.add(
- criteriaBuilder.equal(joinCategory.get("name"), searchCriterias.getCategoryName()));
- }
- bookCriteriaQuery.select(bookRoot)
- .where(predicates.toArray(new Predicate[]{}))
- .distinct(true);
- return bookCriteriaQuery;
- }
- private List<Book> runCriteriaQuery(CriteriaQuery<Book> bookCriteriaQuery) {
- TypedQuery<Book> query = em.createQuery(bookCriteriaQuery);
- List<Book> books = query.getResultList();
- System.out.println(query.unwrap(org.hibernate.Query.class).getQueryString());
- return books;
- }
Advertisement
Add Comment
Please, Sign In to add comment