gpt4 book ai didi

hibernate - 使用Hibernate进行复杂查询的问题

转载 作者:行者123 更新时间:2023-12-02 14:55:15 28 4
gpt4 key购买 nike

我有7个摘要表,每个星期的每一天。
txn_summary_monday ... txn_summary_tuesday等...

该表存储着每个日期(每个星期一,每个星期二……等等),位置,用户,资源等的事务计数。

这是表的示例域

class TxnSummFri {
Long id
Transaction trans
Users guser
Resources gresource
Integer txnCount
Date currentdate
String accountid

}

我需要按日期范围中的位置来获取总计数...(因此它将是每个表中每个位置的所有单个表计数的总和,然后是所有表中该位置的计数总和)。

还有一件事是我必须在汇总表上执行左联接而不是内部联接,因为我希望最终列表中的7个表中的所有可能位置。 (某些表格可能缺少某些位置)。

如何在休眠状态下编写上述查询...我的应用程序中有汇总表作为域对象。
该应用程序基于grails / groovy。

这是我到目前为止所写的...现在每个表的起始位置都按位置计数,以按位置对这些值求和。
def SummTblList  = ['TxnSummMon','TxnSummTue','TxnSummWed','TxnSummThu','TxnSummFri','TxnSummSat','TxnSummSun']
def res_row
def resourceInstance=Resources.get(Long.parseLong(res_id))
SummTblList.each{
res_row=it.createCriteria().get {

eq('resource',resourceInstance)
between('date', new Date()-31, new Date())

projections {
sum('actioncount')
groupProperty 'location'
}
}

关于架构要求的信息(与上面无关):
基本上,我在用户事务表上有各种查询...用于按事务,用户,资源,日期,用户,资源,位置进行汇总。我使用融合图表(基于Flash的工具),使用jasper报告和常规UI搜索来运行图表来进行这些查询。

以前我们只使用一个表,但是要为过去7天的用户 Activity 生成报告(4个资源中有4个需要60秒)...我希望使其速度至少快20倍。

提前致谢,

普里扬克

最佳答案

我将数据库更改为具有单个事务表,而不是一周中的每一天的表。这将大大简化查询。

如果我没有能力更改数据库,那么我将向数据库管理员提出一个令人信服的论据,说明为什么我们应该将数据库更改为具有单个事务表。

如果我的令人信服的论点被拒绝,我会做一些大胆的事情(不一定按此顺序):

  • 看看是否可以创建以某种方式组合所有表的 View ,然后GORM映射该 View
  • 看看是否使用高级GORM / Hibernate功能(例如基类)可以简化查询
  • 分解并尝试创建HQL查询以从每个表
  • 中选择这些值
  • 如果创建HQL查询会导致问题,请查看本地查询是否会更简单
  • 关于hibernate - 使用Hibernate进行复杂查询的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8828907/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com