[英]How Spring data jpa @Query annotation works
我对Spring data
和JPA
都是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);
当我从o.userId
删除userId
,将返回整个对象,而不是Integer
。
我的假设是,如果返回类型与查询中的返回类型不匹配,则应该引发错误。
关键是要在运行时中删除Java中的泛型 。
如果类型参数不受限制,则将通用类型中的所有类型参数替换为其边界或对象。 因此,产生的字节码仅包含普通的类,接口和方法。
因此,Spring无法检查泛型类型,并相信您不会错配类型。 当然,如果返回Integer
而不是User
(没有泛型),那么Spring会抛出错误。
将返回类型从List<Integer>
更改为List<User>
,它应该可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.