繁体   English   中英

Spring Data JPA @Query注释如何工作

[英]How Spring data jpa @Query annotation works

我对Spring dataJPA都是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM