【问题标题】:Convert query Oracle with HQL (Hibernate Query Language)使用 HQL(休眠查询语言)转换查询 Oracle
【发布时间】:2023-03-10 18:35:01
【问题描述】:

我有这个 Oracle 查询,我必须转换成 HQL(休眠查询语言)。我还没有找到有关转换关键字的信息,例如“START WITH”或“CONNECT BY PRIOR”或“SINBLINGS”。 你能帮帮我吗?

查询是这样的:

SELECT NOME_PADRE, COD_PADRE, NOME_FIGLIO, COD_FIGLIO,
CONFIRM_COD_FIGLIO, LEVEL
FROM (
    SELECT s1.NOME AS NOME_PADRE, a.PADRE AS COD_PADRE, s2.NOME AS
           NOME_FIGLIO, a.CMU AS COD_FIGLIO, s2.CMU AS 
           CONFIRM_COD_FIGLIO 
FROM ALBERO a JOIN STRUTTURE s1 ON a.PADRE = s1.CMU 
        JOIN STRUTTURE s2 ON a.CMU = s2.CMU
ORDER BY PADRE ASC
) 
START WITH COD_PADRE = '00000'
CONNECT BY PRIOR COD_FIGLIO = COD_PADRE 
ORDER SIBLINGS BY COD_PADRE

非常感谢

【问题讨论】:

  • 这看起来是一个递归分层查询。我很确定 HQL 根本不支持这种语法。最不痛苦的事情可能是通过 Java 中的存储过程调用您当前的 Oracle 调用。
  • 为什么要尝试将其转换为 HQL?只需使用 Hibernate 将其作为本机查询执行即可。

标签: java oracle hibernate hql


【解决方案1】:

我尝试使用本机查询。

我使用 Spring-Boot,我有一个控制器、一个服务和一个存储库。 在我的存储库中,我实现了这样的本机查询:

String QUERY = " SELECT s.CMU, s.NOME, a.PADRE, LEVEL "
             + " FROM STRUTTURE s LEFT JOIN ALBERO a ON s.CMU = a.CMU "
             + " START WITH a.PADRE = '00000' "
             + " CONNECT BY PRIOR a.CMU = a.PADRE "
             + " ORDER SIBLINGS BY a.PADRE";
@Query(nativeQuery = true, value = QUERY)
public List<Struttura> findAllWithConnectBy();

但我有这个错误:

org.springframework.beans.factory.BeanCreationNotAllowedException:创建名为“strutturaController”的bean时出错:当该工厂的单例处于销毁状态时,不允许创建单例bean(不要在销毁方法实现中从BeanFactory请求bean! )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多