This seems like a pretty simple question, but I have not managed to find a definitive answer yet. I have a DAO class, which is naturally querying the database by using criteria queries. So I would like to know if it is safe to use the same CriteriaBuilder implementation for the creation of different queries or do I have to create new CriteriaBuilder instance for each query. Following code example should illustrate what I would like to do:
public class DAO() {
CriteriaBuilder cb = null;
public DAO() {
cb = getEntityManager().getCriteriaBuilder();
}
public List<String> getNames() {
CriteriaQuery<String> nameSearch = cb.createQuery(String.class);
...
}
public List<Address> getAddresses(String name) {
CriteriaQuery<Address> nameSearch = cb.createQuery(Address.class);
...
}
}
Is it ok to do this?
Reading the javadoc in section 3.1.1 EntityManager Interface of the JPA 2.0 specification (JSR 317):
And this comment just after:
And the section 6.5 Constructing Criteria Queries
I expect being able to reuse a single
CriteriaBuilderto create many queries for the lifetime of the entity manager. But that’s my interpretation. However, my initial testing seems to confirm there is nothing wrong with that (the contrary would be indeed horrible).