【问题标题】:Hibernate Multiple Table Query PerformanceHibernate 多表查询性能
【发布时间】:2018-11-16 07:20:04
【问题描述】:

我有一个包含仪表板页面的项目。在该仪表板页面中,我必须显示:

  1. 统计图表
  2. 新信息
  3. 给管理员的新用户建议
  4. 新消息数

现在上面的每一个信息都与我数据库中的不同表相关。

我创建了不同的实体并且我正在使用休眠。假设 client-A 打开他的仪表板,我应该执行多个查询以收集所有这些实体的所有信息。以下是挑战:

  1. 由于每个请求在我的程序中一次在一个线程中运行,因此每个查询都必须完成,其他查询才能运行(不是同时)
  2. 我们不能一次创建多个查询并映射到休眠中的不同实体
  3. @Formula 注解不能映射整个实体,只能映射单个数据类型

我认为获得高效和快速输出的最佳方法是创建一个 Big Native 查询并使用单个查询一次获取所有数据但是如果我要这样做,我必须自己编写原生查询和映射所有内容,这使得使用 hibernate 的唯一性变得模糊。

我正在考虑的另一种方法是在我的应用程序中使用执行器服务和多线程

现在我的问题是,我仍然可以使用休眠映射并发出高性能查询的最佳方法是什么?

提前谢谢你

【问题讨论】:

  • 您写了这篇文章已经付出了很大的努力,但最后只是征求意见,不适合本站。
  • @BheshGurung 这不是一个意见,我要求的是实现正确和适当应用程序的最佳方法。这完全是技术性的,你最好再读一遍这个问题
  • 抱歉,当您说“什么是最好的方法”时,您只是在征求意见。
  • @BheshGurung 不是这样。如果你这么说,那么这个网站内不应该有任何设计模式问题。它们也是软件开发的最佳方法
  • 可以有设计模式相关的问题。例如你可以问,“如何在 Java 中实现单例模式?”。然后五个不同的人将向您展示五种不同的实现方式。没关系。但你也可以问,“哪个实现最好?”这是不对的,因为您只是在询问为什么每个人都认为自己的版本是最好的。希望这是有道理的。

标签: java hibernate jakarta-ee hibernate-mapping query-performance


【解决方案1】:

您的问题似乎源于您认为需要在一次控制器调用中收集仪表板的所有信息才能呈现单个页面的概念。您应该做的是退后一步,尝试组件化您的仪表板。

换句话说,我的意思是利用 Ajax 的异步特性。

当浏览器可以异步处理启动多个 Web 请求以呈现单个网页时,确实没有理由在当今的现代浏览器技术中使用执行器服务。

【讨论】:

  • 实际上我知道这种方法,但我不想这样做,因为每个页面的工作量都很大,我只想尽快交付我的项目你对创建视图有什么意见吗?从多个表中获取所有数据并让hibernate获取这些数据?
  • 我所说的视图是数据库视图
  • 像往常一样创建您的数据库视图,然后 (1) 创建一个映射到您的视图的实体,将该实体标记为@Immutable,因为数据来自视图并且您应该'不要尝试通过应用程序更改它或 (2) 使用基于元组的查询从视图中获取数据。 Stack Overflow 或网络上已经有大量关于此的信息。
  • 感谢 Naros,我已经通过 Hibernate 掌握了这一点!实际上,我与 JQuery 异步请求一起使用了组件化解决方案,我认为这是最系统的解决方案,并且对我来说效果很好
猜你喜欢
  • 2010-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
  • 2014-05-13
  • 2013-04-29
  • 2012-04-04
相关资源
最近更新 更多