当集合元素拥有自己的集合时,基本查询看起来不起作用。
想象一下拥有投资组合的客户银行的数据模型。获得客户的正确方法是什么?
我试过了:
@Query("SELECT DISTINCT c FROM Customer c LEFT JOIN FETCH c.portfolios")
但它失败了“未能懒惰地初始化角色集合”。
投资定义为:
@ManyToMany(cascade = CascadeType.ALL)
如果我更改fecthType:
,查询将起作用@ManyToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
但有没有办法让它工作而不改变fetchtype?
编辑:
我应该提一下,我使用Spring的JpaRepository来定义上面的查询。所有实体都有各自的存储库,但看起来像获取客户不会触及Portfolios存储库中的任何方法(这将使LEOLD JOIN the Investments),因此永远不会获取投资。
此外,我可以获取具有类似查询的投资组合,并且它工作正常,因为投资没有任何集合。但是取得连锁客户 - >投资组合 - >投资失败。
答案 0 :(得分:2)
您的查询使用left join fetch
选择客户并提取其投资组合。如果您还想获取投资组合的邀请,您需要额外的连接提取,就像在SQL中一样:
select distinct c FROM Customer c
left join fetch c.portfolios portfolio
left join fetch portfolio.investments