【发布时间】:2013-03-30 07:13:52
【问题描述】:
当集合元素有自己的集合时,基本查询似乎不起作用。
想象一个银行的数据模型,其客户拥有投资组合和投资。获取客户的正确方法是什么?
我试过了:
@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 投资),因此永远不会获取投资。
另外,我可以使用类似的查询来获取投资组合,并且它工作正常,因为投资没有任何集合。但是获取连锁客户 -> 投资组合 -> 投资失败。
【问题讨论】:
-
我仍然不明白为什么它适用于具有集合的实体,但不适用于具有集合的实体......
-
只是一个问题,使用多对一映射是否仍然会出现错误?
-
我有另一个使用 @OneToMany 的案例,但同样失败。共同点是集合的元素也有集合。
-
你能不带 DISTINCT 试试吗?
标签: hibernate jpa spring-data-jpa