如何使用 JPQL return 只是集合的单个字段?

How to return just a single field of a collection using JPQL?

在我的数据库中我有软件包,这些软件包有维护者。现在我只想 return 给定软件包的维护者姓名。 PackageMaintainerManyToMany 关联。

我已经尝试了好几件事,但都没有真正成功。

这return是我目前使用的整个 Maintainer 实体。

select p.maintainers from Package p where p.name = :name

不过最后我只对名称感兴趣,我认为必须有一种方法可以从查询中直接 return a Set<String>。目前我正在代码中执行此操作。

var maintainers = repo.findMaintainersByPackageName(name);
return maintainers.stream().map(m -> m.getName()).collect(Collectors.toSet());

这是我试过的方法。

select p.maintainers.name from Package p where p.name = :name

这会导致错误

org.hibernate.QueryException: illegal attempt to dereference collection

我也试过从另一边过来。

select m.name from Maintainer m where m.packages.name = :name

不幸的是我也遇到了错误

org.hibernate.QueryException: illegal attempt to dereference collection

所以基本上问题是,我如何 return jpql 中集合的单个字段?我有点迷路了。

非常感谢!

您应该在 JPQL 中使用 INNER JOIN。 像

"select m.name from Maintainer m INNER JOIN m.packages p where p.name = :name"