I am using Java8 with Hibernate 5.2.1 and JPA2 with MySQL.
I have the following query that works perfectly:
final EntityManagerFactory entityManagerFactory = entityManager.getEntityManagerFactory();
final CriteriaBuilder criteriaBuilder = entityManagerFactory.getCriteriaBuilder();
CriteriaQuery<Rating> criteria = criteriaBuilder.createQuery(Rating.class);
Root<Rating> root = criteria.from(Rating.class);
ParameterExpression<Job> paramJob = criteriaBuilder.parameter(Job.class);
criteria.select(root).where(criteriaBuilder.equal(root.get("job"), paramJob));
As you can see, the query has one parameter paramJob
. I would like to add a second parameter:
ParameterExpression<Person> paramPerson = criteriaBuilder.parameter(Person.class);
Question
How do I modify the following line to accommodate the second parameter?
criteria.select(root).where(criteriaBuilder.equal(root.get("job"), paramJob));
Can I just add a second line:
criteria.select(root).where(criteriaBuilder.equal(root.get("person"), paramPerson));
Thanks
try this:
criteria.select(root).where(
criteriaBuilder.equal(root.get("job"), paramJob),
criteriaBuilder.equal(root.get("person"), paramPerson)
);
a more dynamic approach in my eyes. you will have to adjust some things, but this way you can also set up a dynamic where clause:
final EntityManagerFactory entityManagerFactory = entityManager.getEntityManagerFactory();
final CriteriaBuilder criteriaBuilder = entityManagerFactory.getCriteriaBuilder();
CriteriaQuery<Rating> criteria = criteriaBuilder.createQuery(Rating.class);
Root<Rating> root = criteria.from(Rating.class);
List<Predicate> predicates = new ArrayList<Predicate>();
predicates.add(criteriaBuilder.equal(root.get("job"), Job.class)); //might need to change ther Person.class to whatever matches the job
predicates.add(criteriaBuilder.equal(root.get("person"), paramPerson)); //same as above
criteria.select(root).where(predicates.toArray(new Predicate[]{}));
//execute query
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With