Чтение javadoc в разделе 3.1.1 Интерфейс EntityManager спецификации JPA 2.0 (JSR 317):
/**
* Return an instance of CriteriaBuilder for the creation of
* CriteriaQuery objects.
* @return CriteriaBuilder instance
* @throws IllegalStateException if the entity manager has
* been closed
*/
public CriteriaBuilder getCriteriaBuilder();
И этот комментарий сразу после:
Query
, TypedQuery
,
CriteriaBuilder
, Metamodel
и
EntityTransaction
полученных объектов
от менеджера объекта действительны в то время как
этот менеджер сущностей открыт.
И раздел 6.5 Построение критериев запросов
Интерфейс CriteriaBuilder
используется для строительства CriteriaQuery
объекты. CriteriaBuilder
реализация доступна через
getCriteriaBuilder
метод
EntityManager
или
EntityManagerFactory
интерфейс.
Я ожидаю, что смогу повторно использовать один CriteriaBuilder
для создания множества запросов в течение всего времени существования менеджера сущностей. Но это моя интерпретация. Тем не менее, мое первоначальное тестирование, похоже, подтверждает, что в этом нет ничего плохого (наоборот, это действительно ужасно).