【问题标题】:Not getting results in Hibernate native query using WITH Clause使用 WITH 子句在 Hibernate 本机查询中未获得结果
【发布时间】:2018-02-19 13:59:58
【问题描述】:

我有一个以“WITH”子句开头的查询。如果我在具有 DB2 连接的 SQuirrel 中触发相同的查询 - 它可以工作。但同样的查询在 Hibernate Native SQL 中返回空白数组。

 WITH edd_translated_article_tmp (article_id, tran_article_id, tran_article_title, 
 article_url, source, tran_content ) 
 AS (SELECT M.original_article_id  AS article_id, 
            M.article_id           AS TRAN_ARTICLE_ID, 
            M.article_title        AS TRAN_ARTICLE_TITLE, 
            M.article_url, 
            M.primary_source       AS SOURCE, 
            M.article_content_html AS TRAN_CONTENT 
     FROM   db2admin.edd_searched_article_main M 
     WHERE  M.original_article_id = 5239415) 
SELECT A.article_id, 
   A.article_title, 
   A.article_url, 
   A.primary_source       AS SOURCE, 
   A.article_content_html AS CONTENT, 
   M.tran_article_id      AS TRAN_ARTICLE_ID, 
   M.tran_article_title   AS TRAN_ARTICLE_TITLE, 
   M.tran_content         AS TRAN_CONTENT
FROM   db2admin.edd_searched_article_main AS A 
   LEFT OUTER JOIN edd_translated_article_tmp M 
                ON A.article_id = m.article_id
WHERE  A.article_id = 5239415 

Hibernate 原生查询代码:

Query query = getSession().createSQLQuery(sqlNativeQuery);
query.list()

【问题讨论】:

  • 唯一想到的解释是您使用的 DB2 方言有问题。

标签: sql hibernate db2 native-sql


【解决方案1】:

就我所知,您的查询应该会运行,假设您在 Hibernate 中使用正确的 DB2 方言。例如,如果您使用的是不支持 CTE 的非常古老的方言,那么它可能无法正常工作。

对于解决方法,您始终可以将 CTE 内联到原始查询中:

SELECT
    a.article_id, 
    a.article_title, 
    a.article_url, 
    a.primary_source       AS SOURCE, 
    a.article_content_html AS CONTENT, 
    m.tran_article_id      AS TRAN_ARTICLE_ID, 
    m.tran_article_title   AS TRAN_ARTICLE_TITLE, 
    m.tran_content         AS TRAN_CONTENT
FROM db2admin.edd_searched_article_main AS a
LEFT OUTER JOIN
(
    SELECT
        original_article_id  AS article_id,
        article_id           AS TRAN_ARTICLE_ID, 
        article_title        AS TRAN_ARTICLE_TITLE, 
        article_url, 
        primary_source       AS SOURCE, 
        article_content_html AS TRAN_CONTENT 
    FROM db2admin.edd_searched_article_main
    WHERE original_article_id = 5239415
) m
    ON a.article_id = m.article_id
WHERE
    a.article_id = 5239415 ;

【讨论】:

  • 当你有很多事情要关注时,你会犯愚蠢的错误。我正在连接到 QA DB 而不是 Dev - 这解决了我的问题。 +1 解决方法 ;)
猜你喜欢
  • 2014-09-28
  • 2022-01-04
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 2021-12-14
  • 1970-01-01
相关资源
最近更新 更多