我正在其中一个项目中使用Spring Data JPA,并且在部署应用程序时遇到运行时异常。
技术堆栈低于:
Spring Boot 1
Tomcat 8
Spring Data JPA
例外:
原因:java.lang.IllegalArgumentException:验证失败 查询方法public abstract java.util.List com.atul.persistent.dao.ProductDao.findAllSubscribedProductsByUserId(java.lang.Long)! 在 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:无法解析属性:的产品: com.atul.persistent.model.User [从以下列表中选择不同的u.products 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或hibernate提供的,因此它是Spring Data JPA提供的吗?
3)如果所有查询都通过这种方式验证,是否不会导致应用程序启动缓慢?