Hibernate可以返回除List之外的结果对象的集合吗?
Hibernate API是否支持除List之外的集合forms的对象结果集?
例如,我有运行数十万次迭代的进程,以便为客户端创建一些数据。 此过程使用Value表中的记录(例如),以便为每次迭代创建此输出。
使用List我将不得不遍历整个列表以找到某个值,这是昂贵的。 我希望能够返回一个TreeMap并以编程方式指定一个键,这样我就可以在集合中搜索我需要的特定值。 Hibernate可以为我做这个吗?
我假设您指的是Query.list()
方法。 如果是这样:否,除List
之外无法返回顶级结果。 如果您收到的结果太多,为什么不向数据库发出更严格的查询? 如果查询难以约束,您可以使用Hibernate List
的内容填充您自己的Map
,然后丢弃该列表。
如果我理解正确,您将一堆数据从数据库加载到内存,然后通过查找该列表中的某些对象在本地使用它们。
如果是这种情况,我会看到2个选项。
- 不要加载所有数据,但是对于每次迭代,只需返回您需要的特定记录的查询来访问数据库。 这将产生更多的数据库查询,因此它可能会慢一些,但内存消耗更少。 通过添加缓存可以轻松地改进此解决方案,以便快速获得大多数使用的值。 它当然需要一些性能测量,但我通常喜欢一个具有良好缓存的天真解决方案,因为缓存可以作为交叉问题实现,并且对程序员非常透明。
- 如果你真的想要在内存中加载所有数据(这实际上是一种缓存forms),那么将数据从列表转换为TreeMap(或任何其他有效结构)的时间与完整处理相比可能会很小。 所以你可以自己做数据转换。
正如我所说,在一般情况下,我赞成使用缓存的解决方案……
来自Java Persistence with Hibernate :
- 可以使用
映射java.util.Map,保留键和值对。 使用
java.util.HashMap
初始化属性。 - 可以使用
元素映射
java.util.SortedMap
,并且可以将sort属性设置为比较器或用于内存中排序的自然顺序。 使用java.util.TreeMap
实例初始化集合。
是的,那可以做到。
但是,您可能必须让您的域类实现Comparable
; 我不认为你可以使用比较器来做到这一点。
编辑:似乎我误解了这个问题。 如果您正在讨论即席查询的结果,那么以上内容对您没有帮助。 如果查询是固定的,则可以通过将具有TreeMap属性的对象绑定到数据库视图来使其工作。
当然,您总是可以自己构建地图,只需要很少的工作和处理开销。
- Hibernate – 从多个表到一个对象的复杂查询
- Hibernate和JPA有什么区别?
- org.hibernate.MappingNotFoundException:resource:*找不到hbm.xml
- 春季默认@Transactional和默认的丢失更新
- Hibernate:只在不存在的情况下创建数据库
- 如何在hibernate中设置最大长度的列长度
- H2不在我的Spring Boot应用程序中创建/更新表。 我的实体出了什么问题?
- CrudRepository和Hibernate:在事务中保存(List
)vs save(Entity) - 引起:java.lang.IllegalStateException:找到不明确的映射。 无法映射’appController’bean方法