应用程序启动时的Spring Data JPA查询验证

时间:2018-09-19 13:49:18

标签: spring-boot spring-data-jpa

我正在其中一个项目中使用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)如果所有查询都通过这种方式验证,是否不会导致应用程序启动缓慢?

0 个答案:

没有答案