如何使用JPQL查询返回关联集合属性中的单个指定字段
错误原因
JPQL 不支持直接对集合类型的关联属性执行属性解引用(也就是 p.maintainers.name 这类写法,maintainers 是多对多关联的集合对象,不能直接点选后续属性),必须先通过 JOIN 将集合关联展开为单条记录维度,再查询对应字段。
正确 JPQL 写法
写法1:从 Package 表正向关联查询
SELECT m.name FROM Package p JOIN p.maintainers m WHERE p.name = :name
写法2:从 Maintainer 表反向关联查询
SELECT m.name FROM Maintainer m JOIN m.packages p WHERE p.name = :name
Spring Data JPA 调用示例
直接在 Repository 接口中定义对应方法,返回值指定为 Set<String> 即可,框架会自动封装结果:
public interface PackageRepository extends JpaRepository<Package, Long> { @Query("SELECT m.name FROM Package p JOIN p.maintainers m WHERE p.name = :name") Set<String> findMaintainerNamesByPackageName(@Param("name") String name); }
调用该方法可直接获取维护人员姓名字符串集合,无需额外做流处理转换。
内容的提问来源于stack exchange,提问作者zemirco
相关产品推荐
相关产品推荐

