关于我之前的问题,我想确保所有子对象都已加载,因为我有多个线程可能需要访问数据(从而避免延迟加载异常)。我了解做到这一点的方法是在查询(EJB QL)中使用“ fetch”关键字。像这样:
select distinct o from Order o left join fetch o.orderLines
假设模型中包含一个Order
类OrderLines
。
我的问题是,似乎需要“ distinct”关键字,否则我似乎会Order
为每个关键字找回一个OrderLine
。我做对了吗?
也许更重要的是,是否有一种方法可以拉入所有子对象,无论深度如何?我们大约有10-15个类,对于服务器,我们将需要加载所有内容...我避免使用FetchType.EAGER
它,因为这意味着它一直很渴望,尤其是Web前端加载了所有内容-但这也许就是方法-你做什么?我似乎记得我们以前尝试过这种方法,然后获得了非常慢的网页-但这也许意味着我们应该使用二级缓存?
更改注释不是IMO的好主意。由于无法在运行时将其更改为惰性。最好使所有内容都变得懒惰,并根据需要获取。
我不确定我是否了解没有映射的问题。左连接提取应该是您描述的用例所需要的。当然,如果订单行有一个订单作为其父订单,那么您将获得每个订单行的订单。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句