Моя цель - создать метод, с помощью которого можно получить общее количество строк из любой таблицы в моей базе данных.Динамический COUNT в JPA бросает NullPointerException
Это то, что я сделал:
ENTITY_MANAGER_FACTORY = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT);
EM = ENTITY_MANAGER_FACTORY.createEntityManager();
public static long getRowCount(Root<?> root) {
CriteriaBuilder cb = EM.getCriteriaBuilder();
CriteriaQuery<Long> query = cb.createQuery(Long.class);
root = query.from(root.getClass());
query.select(cb.count(root));
return EM.createQuery(query).getSingleResult();
}
Это, как я вызываю метод:
Root<PlacesEntity> placesRoot = null;
DbTools.getRowCount(placesRoot)
Это не работает, хотя, метод бросает NullPointerException
в то line root = query.from(root.getClass());
.
Я не уверен, как может java-метод сбой без каких-либо исключений. Является ли JVM завершенным, или метод вызова просто ловит и игнорирует исключения? Также обратите внимание, что EntityManager не является потокобезопасным, поэтому, вероятно, его не следует инициализировать и использовать статически. Попробуйте включить ведение журнала и посмотреть, нет ли у вас чего-то. – Chris
@Chris Я установил общий try catch и выглядит так, как будто это вызывает «NullPointerException». –