当收集元素具有自己的集合时,它看起来像基本查询不起作用。查询具有嵌套集合的实体的正确方法?
想象一下银行的客户数据模型,客户拥有投资组合。什么是获得客户的正确方式?
我尝试这样做:
@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存储库中的任何方法(这会左击加入投资),因此投资永远不会被提取。
此外,我可以使用类似的查询获取投资组合,并且它可以正常工作,因为投资没有任何集合。但是提取连锁客户 - >投资组合 - >投资失败。
这会帮助你:http://stackoverflow.com/questions/5404599/failed-to -lazily-initialize-a-collection-of-role – DessDess 2013-04-08 09:03:22
我还是不明白它为什么适用于具有集合的实体,但不适用于具有集合的集合的实体... – wannabeartist 2013-04-08 10:40:20
只是一个问题,带有ManyToOne映射仍然得到错误? – DessDess 2013-04-08 12:23:26