nhibernate - 使用 nhibernate(和 queryover)急切地获取多个嵌套关联

标签 nhibernate collections associations fetch queryover

我有一个包含多个嵌套关联的数据库。基本上,结构如下:

Order -> OrderItem -> OrderItemPlaylist -> OrderPlaylistItem -> Track -> Artist

我需要根据在特定日期售出的所有订单生成一个报告,该报告需要遍历所有提到的关联以生成所需的信息。

尝试将所有表连接在一起将是一种矫枉过正,因为考虑到它将 6 个表连接在一起,这将导致非常大的笛卡尔连接和许多冗余数据。代码如下:

q.Left.JoinQueryOver<OrderItem>(order => order.OrderItems)
     .Left.JoinQueryOver<OrderItemPlaylist>(orderItem => orderItem.Playlist)
     .Left.JoinQueryOver<OrderItemPlaylistItem>(orderItemPlaylist => orderItemPlaylist.PlaylistItems)
     .Left.JoinQueryOver<Track>(orderItemPlaylistItem => orderItemPlaylistItem.Track)
     .Left.JoinQueryOver<Artist>(track => track.Artist)

上述方法有效,但即使有几个订单,每个订单都有几个订单项,每个播放列表都包含多个轨道,结果会激增至数千条记录,并随着每个额外订单呈指数级增长。

知道最好和最有效的方法是什么吗?我目前已经尝试启用批加载,这大大减少了数据库查询的数量,但在我看来仍然不是一个好方法,而更像是一个“简单的解决方法”。

鉴于数据量巨大,没有必要在一个 SQL 查询中加载所有数据。我想每个关联的一个 SQL 查询将是完美的。理想情况下,首先获取所有订单,然后获取订单的所有订单项并将它们加载到关联的集合中,然后是每个订单项的播放列表,依此类推。

此外,这不必专门在 QueryOver 中,因为我可以访问 .RootCriteria 并使用 Criteria API。

任何帮助将不胜感激!

最佳答案

关于nhibernate - 使用 nhibernate(和 queryover)急切地获取多个嵌套关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6114598/

相关文章:

ruby-on-rails - 在没有关联记录的情况下如何查找

ruby-on-rails - Rails 多对一关联

sql-server - NHibernate下SQL Server死锁

c# - 从 NHibernate 子查询中仅选择某些属性

java - 遗传算法每次都给出相同的数据

ruby-on-rails - Rails4 has_many 通过带参数

asp.net-mvc - 如何在不依赖 NHibernate 的情况下实现每个请求的 NHibernate session ?

nhibernate - 我可以有选择地关闭带有 NHibernate 的延迟加载吗?

具有空键的 Java 不区分大小写的映射

java - int[] 存储到 Java 中的对象中