Hibernate API是否支持List之外的集合形式的对象结果集?Hibernate能否返回一个比List更为结果对象的集合?
例如,我有一个运行数十万次迭代的过程,以便为客户端创建一些数据。此过程使用Value表中的记录(例如)为每个迭代创建此输出。
随着列表我将不得不遍历整个列表,以找到一个特定的价值,这是昂贵的。我希望能够返回一个TreeMap并以编程方式指定一个键,以便我可以在集合中搜索我需要的特定值。 Hibernate可以为我做这个吗?
Hibernate API是否支持List之外的集合形式的对象结果集?Hibernate能否返回一个比List更为结果对象的集合?
例如,我有一个运行数十万次迭代的过程,以便为客户端创建一些数据。此过程使用Value表中的记录(例如)为每个迭代创建此输出。
随着列表我将不得不遍历整个列表,以找到一个特定的价值,这是昂贵的。我希望能够返回一个TreeMap并以编程方式指定一个键,以便我可以在集合中搜索我需要的特定值。 Hibernate可以为我做这个吗?
我想你指的是Query.list()
方法。如果是这样:否,除了List
以外,没有办法返回顶级结果。如果您收到的结果太多,为什么不向数据库发出更受限制的查询?如果查询难以限制,您可以使用Hibernate的List
的内容填充自己的Map
,然后丢弃列表。
从Java Persistence with Hibernate:
<map>
,保存键和值 对被映射。使用java.util.HashMap
至 初始化一个属性。java.util.SortedMap
可以映射 与<map>
元件,以及排序 属性可以被设置到任何一个 比较器或自然顺序为在内存中 排序。使用java.util.TreeMap
实例初始化 集合。就像旁边一样,您可以使用List/SortedList,Set/SortedSet,Map/SortedMap,Collection/Bag和primitive-array用Hibernate分组对象。 – Elie 2009-01-06 15:37:46
是的,可以做到。
但是,您可能必须让您的域名类实现Comparable
;我认为你不能用比较器来做。
编辑: 这似乎是我误解了这个问题。如果您正在讨论特设查询的结果,那么上述内容将无助于您。如果查询是固定的,则可以通过将具有TreeMap属性的对象绑定到数据库视图来使其工作。
当然,您可以随时自行构建地图,而且工作量和处理开销都很小。
如果我理解正确,将数据库中的一堆数据加载到内存中,然后通过查找该列表中的某些对象在本地使用它们。
如果是这样,我会看到2个选项。
正如我所说的,在一般情况下,我赞成用高速缓存的解决方案...
是否有理由不能在where子句中指定您的条件? – 2009-01-06 15:35:31
我试图将我想要使用的整个对象集合到内存中,这样我就可以减少对数据库的调用。如果我为每次迭代调用一个SELECT,我正在查看成千上万的调用,运行速度非常慢。 – karlgrz 2009-01-06 15:40:47
“所以我可以减少对数据库的调用” - 它似乎没有工作,因为你有成千上万的电话。您可能需要更聪明的查询或更好的缓存解决方案。 – duffymo 2009-01-07 11:08:45