Spring数据jpa@Query注释的工作原理
我不熟悉Spring数据jpa@Query注释的工作原理,spring,spring-boot,spring-data,spring-data-jpa,jpql,Spring,Spring Boot,Spring Data,Spring Data Jpa,Jpql,我不熟悉Spring数据和JPA。我很好奇查询注释是如何工作的。就像在我的场景中一样,我需要一个组织的所有用户ID。这就是我所做的: @Query("select o.userId from User o where o.orgId = :orgId") List <Integer> findUserIdsByOrgId(@Param("orgId")int orgId); 当我从o.userId中删除userId时,将返回整个对象,而不是整数 我的假设是,如果返回类型与
Spring数据
和JPA
。我很好奇查询注释是如何工作的。就像在我的场景中一样,我需要一个组织的所有用户ID
。这就是我所做的:
@Query("select o.userId from User o where o.orgId = :orgId")
List <Integer> findUserIdsByOrgId(@Param("orgId")int orgId);
当我从o.userId
中删除userId
时,将返回整个对象,而不是整数
我的假设是,如果返回类型与查询中的返回类型不匹配,应该抛出一个错误。将返回类型从List
更改为List
,它应该可以正常工作。问题是这样的
如果类型参数是无界的,则用其边界或对象替换泛型类型中的所有类型参数。因此,生成的字节码只包含普通类、接口和方法
所以Spring不能检查泛型类型,并且相信您不会不匹配类型。当然,如果您返回的是Integer
而不是User
(没有泛型),那么Spring将抛出一个错误。我不是说有任何问题。如果我通过查询得到一个对象,并且方法返回类型是integer,这是一个疑问。它应该抛出一个解析错误。回报如何变化
@Query("select o from User o where o.orgId = :orgId")
List <Integer> findUserIdsByOrgId(@Param("orgId")int orgId);