ObjectDB ObjectDB

CriteriaQuery .where() for multiple conditions


When using the below, there appears to be an OR condition:

	criteriaQuery.where(criteriaBuilder.equal(root.get("name"), name));
	criteriaQuery.where(criteriaBuilder.equal(root.get("surname"), surname));
	List<Person> allPersons = query.getResultList();

The results will contain records where name is equal to the given name OR surname is equal to the given surname. Is it possible to make it an AND condition instead so that it will only contain records with both name AND surname as specified?

I have tried the below and it works but not sure if it's the best way to do it or not?

public Person read(String name, String surname, ServletContext servletContext) {
        EntityManagerFactory emf = (EntityManagerFactory) servletContext.getAttribute("emf");
        EntityManager em = emf.createEntityManager();
        Person person;
        try {
            CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
     criteriaQuery = criteriaBuilder.createQuery(Person.class);
      root = criteriaQuery.from(Person.class); criteriaQuery.select(root); Predicate criteria = criteriaBuilder.and(criteriaBuilder.equal(root.get("name"), name), criteriaBuilder.equal(root.get("surname"), surname)); criteriaQuery.where(criteria); person = em.createQuery(criteriaQuery).getSingleResult(); em.getTransaction().commit(); } finally { if (em.getTransaction().isActive()) { em.getTransaction().rollback(); } em.close(); } return person; } 

Yes, it looks fine.

You may also check the result query string (JPQL) by toString() on the criteria query.

ObjectDB Support


To post on this website please sign in.