【问题标题】:How to convert mySQL subquery into HQL name query如何将 mySQL 子查询转换为 HQL 名称查询
【发布时间】:2018-03-27 15:45:10
【问题描述】:

这是一个完美的查询与 mySQl 一起工作,但它不适用于 hql 名称查询任何人都可以帮助我,不胜感激

这是我的 SQL

SELECT * FROM ( SELECT * FROM EsEvent  ORDER BY eventTimestamp DESC ) e WHERE isReset=1 GROUP BY eventId;

这是我编写的 HQL 名称查询。

FROM ( FROM EsEvent es ORDER BY es.eventTimestamp DESC ) EsEvent e WHERE e.isReset=1 GROUP BY e.eventId

但这不起作用,它会报错

未能创建 sessionFactory 对象:org.hibernate.HibernateException:命名查询中的错误:HQL_GET_ALL_ESEVENT_GROUP_BY_EVENT_ID_ORDER_BY_EVENT_TIMESTAMP_AND_RESET_ID_ONE

我的目的是在我评估 where 子句之前我需要订购任何人都可以帮助我的地方。

【问题讨论】:

    标签: mysql hibernate subquery hql graphql


    【解决方案1】:

    在 HQL 中试试这个:

    SELECT e FROM 
    (SELECT es FROM EsEvent es ORDER BY es.eventTimestamp DESC ) EsEvent e
    WHERE e.isReset=1 GROUP BY e.eventId
    

    但是一个简单的方法是:

    SELECT es FROM EsEvent es 
    WHERE es.isReset=1
    GROUP BY es.eventId
    ORDER BY es.eventTimestamp DESC
    

    注意:

    通常,当您在字段列表中使用 GROUP BY 子句时,您只能使用分组字段或聚合(按功能)字段

    【讨论】:

    • 还是同样的错误。如果有其他方法可以尝试,我只需要实现我的目的。
    • @randikaisuru 尝试输入 SELECT e.eventId 并告诉我您的查询是否有效
    • 还是同样的错误。但这是完美的工作 "SELECT e.eventId FROM EsEvent e WHERE e.isReset=1 GROUP BY e.eventId" 但是当它添加子查询部分时,它将以错误结束。
    • @randikaisuru 两件事:第一个 select 字段列表和 group by 字段列表必须相同。第二,子查询无用。但是如果你想使用你必须改变它。告诉我对你来说是否重要,以便我们尝试改变它
    • 我的主要目的是在评估 where 子句之前我需要对其进行排序,并且在该排序列表中我需要选择 where e.isReset=1 列表。我不需要使用子查询。如果有其他方式我会接受。
    猜你喜欢
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    • 2021-11-02
    相关资源
    最近更新 更多