在@Query中使用#{principal}会导致“无法在null上找到属性或字段'principal'”

时间:2019-01-26 10:21:55

标签: java spring spring-boot spring-security spring-data-jpa

the official guide之后,将此@Query添加到仓库中后,Spring崩溃,Property or field 'principal' cannot be found on null

@Query("select count(e) from #{#entityName} e where e.user_id = #{principal?.id}")

在我看来,这似乎是一个循环依赖问题:就我而言,UserDetailsS​​erviceImpl需要一个JpaRepository。生成此存储库后,Spring会尝试评估本身依赖于安全性配置(SecurityEvaluationContextExtension bean)的@Query。安全配置取决于UserDetailsS​​ervice。和。所以。上。

我尝试了多种方法来对此进行转义(@DependsOn,删除了@EnableJpaRepository,移动了配置),但没有成功。由于我刚接触Spring,所以我认为我做的事情确实很愚蠢,所以我问你:

这个星座-取决于JpaRepo的Spring Security Data与UserDetailsS​​ervice的集成是完全可能的吗?我可能做错了什么?

1 个答案:

答案 0 :(得分:0)

愚蠢的是:我忘记了表示查询参数的问号。

@Query(“从#{#entityName} e中选择计数(e),其中e.user_id = #{principal?.id}“)