Hibernate可以返回除List之外的结果对象集合吗?

时间:2009-01-06 15:30:49

标签: java hibernate

Hibernate API是否支持除List之外的集合形式的对象结果集?

例如,我有一个运行数十万次迭代的进程,以便为客户端创建一些数据。此过程使用Value表中的记录(例如),以便为每次迭代创建此输出。

使用List我必须遍历整个列表才能找到某个值,这很昂贵。我希望能够返回一个TreeMap并以编程方式指定一个键,这样我就可以在集合中搜索我需要的特定值。 Hibernate可以为我做这个吗?

4 个答案:

答案 0 :(得分:2)

如果我理解正确,你将数据库中的一堆数据加载到内存中,然后通过查找该列表中的某些对象在本地使用它们。

如果是这种情况,我会看到2个选项。

  1. 不要加载所有数据,但是对于每次迭代,只需返回您需要的特定记录的查询即可访问数据库。这将产生更多的数据库查询,因此它可能会慢一点,但内存消耗更少。通过添加缓存可以轻松地改进此解决方案,以便快速获得大多数使用的值。它当然需要一些性能测量,但我通常喜欢一个具有良好缓存的天真解决方案,因为缓存可以作为交叉关注点实现,并且对程序员来说非常透明。
  2. 如果你真的想要在内存中加载所有数据(这实际上是一种缓存形式),那么将数据从列表转换为TreeMap(或任何其他有效结构)的时间可能会比全面处理。所以你可以自己做数据转换。
  3. 正如我所说,在一般情况下,我赞成使用缓存的解决方案......

答案 1 :(得分:2)

我假设您指的是Query.list()方法。如果是这样:否,除了List之外,无法返回顶级结果。如果您收到太多结果,为什么不向数据库发出更有限的查询?如果查询难以约束,您可以使用Hibernate Map的内容填充自己的List,然后丢弃该列表。

答案 2 :(得分:1)

来自Java Persistence with Hibernate

  • 可以映射java.util.Map <map>,保留关键和价值 对。使用java.util.HashMap来 初始化一个属性。
  • 可以映射java.util.SortedMap 使用<map>元素和排序 属性可以设置为a 比较或自然排序 内存中排序。初始化 使用java.util.TreeMap进行收集 实例

答案 3 :(得分:1)

是的,可以做到。

但是,您可能必须让您的域类实现Comparable;我不认为你可以使用比较器来做到这一点。

修改 好像我误解了这个问题。如果您正在讨论即席查询的结果,那么上述内容对您没有帮助。如果查询是固定的,可以通过将具有TreeMap属性的对象绑定到数据库视图来使其工作。

当然,你总是可以用很少的工作和处理开销来自己构建地图。