Я использую Spring Data JPA в одном из проектов, и при развертывании приложения у меня возникла исключительная ситуация времени выполнения.
Технический стек ниже:
Spring Boot1
Tomcat 8
Данные пружины JPA
Исключение:
Причина: java.lang.IllegalArgumentException:Не удалось проверить запрос для метода public abstract java.util.List com.atul.persistent.dao.ProductDao.findAllSubscribeedProductsByUserId (java.lang.Long)!at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery (SimpleJpaQuery.java:92) ~ [spring-data-jpa-1.10.6.RELEASE.jar: na]
Причина:java.lang.IllegalArgumentException: org.hibernate.QueryException: не удалось разрешить свойство: products of: com.atul.persistent.model.User [выберите отдельные u.продукты из com.atul.persistent.model.User u присоединитесь к u.productsгде u.userId =: userId
Я уже знаю причину этого исключения, поскольку я изменил сопоставление сущностей JPA, но забыл изменить запрос, поэтому ошибка правильно описывает проблему.
Ниже приведен неправильный запрос и правильный запрос:
@Query("select distinct u.products from User u join u.products where u.userId = :userId")
public List<Products> findAllSubscribedProductsByUserId(@Param("userId") Long userId);
@Query("select distinct p from Products p join p.users where p.users.userId = :userId")
public List<Products> findAllSubscribedProductsByUserId(@Param("userId") Long userId);
Мой вопрос:
1) Проверяет ли Spring Data JPA запросы во время выполнения при запуске приложения?
2) Поскольку я не думаю, что эта функция предоставляется JPA или спящим режимом, предоставляется ли она Spring Data JPA?
3) Разве это не приводит к медленному запуску приложения, если все запросы проверяются следующим образом?