1

当集合元素有自己的集合时,基本查询似乎不起作用。

想象一个银行的数据模型,客户有投资组合,有投资。获取客户的正确方法是什么?

我试过这个:

@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 来定义上述查询。所有实体都有各自的存储库,但看起来获取客户不会触及投资组合存储库中的任何方法(这将 LEFT JOIN 投资),因此永远不会获取投资。

此外,我可以使用类似的查询来获取投资组合,并且它工作正常,因为投资没有任何集合。但是获取链客户 -> 投资组合 -> 投资失败。

4

1 回答 1

2

您的查询选择客户并获取他们的投资组合,使用left join fetch. 如果你还想获取投资组合的投资,你需要一个额外的连接获取,就像在 SQL 中一样:

select distinct c FROM Customer c 
left join fetch c.portfolios portfolio
left join fetch portfolio.investments
于 2013-04-08T13:43:09.363 回答