当集合元素有自己的集合时,基本查询似乎不起作用。
想象一个银行的数据模型,客户有投资组合,有投资。获取客户的正确方法是什么?
我试过这个:
@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 投资),因此永远不会获取投资。
此外,我可以使用类似的查询来获取投资组合,并且它工作正常,因为投资没有任何集合。但是获取链客户 -> 投资组合 -> 投资失败。