在我的資料庫中,我有軟體包,而這些軟體包有維護者。現在我只想回傳給定軟體包的維護者姓名。Package并Maintainer有ManyToMany協會。
我已經嘗試了幾件事,但并沒有真正成功。
這將回傳我當前使用的整個維護者物體。
select p.maintainers from Package p where p.name = :name
但是最后我只對名稱感興趣,我認為必須有一種方法可以直接Set<String>從查詢中回傳 a 。目前我正在代碼中執行此操作。
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:非法嘗試取消參考集合
我也試著從另一邊過來。
select m.name from Maintainer m where m.packages.name = :name
不幸的是,我也收到一個錯誤
org.hibernate.QueryException:非法嘗試取消參考集合
所以基本上問題是,如何在 jpql 中回傳集合的單個欄位?我有點失落。
非常感謝你!
uj5u.com熱心網友回復:
您應該在 JPQL 中使用 INNER JOIN。就像是
"select m.name from Maintainer m INNER JOIN m.packages p where p.name = :name"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/379063.html
上一篇:Thymeleaf資料庫更新
下一篇:[面試題] 函式默認引數作用域
