当集合元素有自己的集合时,基本查询看起来不起作用。
设想一家银行的数据模型,其中有客户,这些客户有投资组合。获得客户的正确方法是什么?
我试过这个:
@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来定义上述查询。所有实体都有自己的存储库,但看起来获取客户并不涉及投资组合存储库中的任何方法(这将留下加入投资),因此投资永远不会获取。
此外,我可以使用类似的查询来获取投资组合,它工作得很好,因为投资没有任何集合。但获取->投资的连锁客户->投资组合失败了。
发布于 2013-04-08 21:43:09
您的查询使用left join fetch选择客户并获取他们的投资组合。如果您还想获取投资组合的投资,则需要一个额外的join fetch,就像在SQL中一样:
select distinct c FROM Customer c
left join fetch c.portfolios portfolio
left join fetch portfolio.investmentshttps://stackoverflow.com/questions/15875142
复制相似问题