我是Spring data
和JPA
的新手。我很好奇查询注释是如何工作的。就像在我的场景中一样,我需要组织的所有userIds
。所以这就是我所做的:
@Query("select o.userId from User o where o.orgId = :orgId")
List <Integer> findUserIdsByOrgId(@Param("orgId")int orgId);
以上陈述合理。我得到一个用户ID列表。问题是当我更改查询以搜索User
@Query("select o from User o where o.orgId = :orgId")
List <Integer> findUserIdsByOrgId(@Param("orgId")int orgId);
当我从userId
移除o.userId
时,将返回整个对象,而不是Integer
。
我的假设是,如果返回类型与查询中的返回类型不匹配,则应抛出错误。
答案 0 :(得分:1)
事情是generics in Java are removed in runtime。
如果类型参数是无界的,则将泛型类型中的所有类型参数替换为其边界或对象。因此,生成的字节码只包含普通的类,接口和方法。
因此Spring无法检查泛型类型,并相信您不匹配类型。当然,如果你返回Integer
而不是User
(没有泛型)那么Spring会抛出一个错误。