【问题标题】:unexpected left while doing self left join进行自我左连接时意外左
【发布时间】:2014-12-10 05:35:29
【问题描述】:

我试图在同一张桌子上多次进行自我左连接。每当我执行此查询时,我都会遇到异常。

类 org.hibernate.hql.internal.ast.QuerySyntaxException 消息意外标记:LEFT 靠近第 13 行第 33 列

Query query = null
        def hql = $/
                SELECT
                    c1.id,
                    c1.parentId,
                    c1.navDepth,
                    c1.navOrder,
                    c1.title,
                    c1.fileName,
                    // aliasing filenamepath column as filepath.
                    REPLACE(c1.fileNamePath, 'home/', '') AS filepath
                FROM Content AS c1

                WHERE 0 = 0
                LEFT JOIN Content AS c2
                ON c1.col1 = c2.fileNameLookup
                AND c1.col1 = c2.col1

                LEFT JOIN Content AS c3
                ON c1.col2 = c3.fileNameLookup
                AND c1.col2 = c3.col2

                LEFT JOIN Content AS c4
                ON c1.col3 = c4.fileNameLookup
                AND c1.col3 = c4.col3

                LEFT JOIN Content AS c5
                ON c1.col4 = c5.fileNameLookup
                AND c1.col4 = c5.col4

                LEFT JOIN Content AS c6
                ON c1.col5 = c6.fileNameLookup
                AND c1.col5 = c6.col5

                LEFT JOIN Content AS c7
                ON c1.col6 = c7.fileNameLookup
                AND c1.col6 = c7.col6

                LEFT JOIN Content AS c8
                ON c1.col7 = c8.fileNameLookup
                AND c1.col7 = c8.col7

                LEFT JOIN Content AS c9
                ON c1.col8 = c9.fileNameLookup
                AND c1.col8 = c9.col8

                LEFT JOIN Content AS c10
                ON c1.col9 = c10.fileNameLookup
                AND c1.col9 = c10.col9

                AND c1.isNavItem = 1
                GROUP BY c1.id
                ORDER BY c1.navDepth, c1.navOrder
                /$
                //def result = Content.executeQuery(hql)
        query = Content.executeQuery(hql).setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE)
                .addScalar("filepath", new StringType())
        List<Map<String,Object>> result = query.list()
        return result

谁能告诉我我做错了什么,我怎样才能让它工作?

【问题讨论】:

    标签: java hibernate jpa groovy hql


    【解决方案1】:
    1. WHERE 放错地方了:

      FROM 
      WHERE 0 = 0
      LEFT JOIN Content AS c2
      

      应该是:

      FROM
      LEFT JOIN
      LEFT JOIN
      ...
      WHERE
      GROUP BY
      ORDER BY
      
    2. 在您的查询中没有要设置的 filepath 参数,如果它必须在 WHERE 子句中而不是在 SELECT 子句中:

      addScalar("filepath", new StringType())
      
    3. 您编写了一个带有 LEFT JOINS 和 ON 子句的 SQL 查询,但这是本机 SQL 查询语法。在 HQL 中,您加入可导航实体关联,并且没有 HQL ON 子句。

      要模拟 ON 子句,您需要使用 the with directive

      from Cat as cat
          left join cat.kittens as kitten
              with kitten.bodyWeight > 10.0
      
    4. 先尝试不使用变压器。只需执行查询并让它首先返回一个列表。如果可行,请尝试使用变压器。如果不是,您的查询语法仍然存在问题。

    【讨论】:

    • 感谢您的回复,现在我仍然收到相同的异常,但有不同的消息说content is not mapped
    • 我已经删除了转换器,执行它仍然是相同的异常,但有不同的消息说path expected for join!
    • 我已经删除了ON 子句,现在加入它说意外的令牌 c1。我在做混叠吗?
    猜你喜欢
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 2011-09-10
    • 2016-05-23
    • 2014-11-07
    • 2015-04-13
    相关资源
    最近更新 更多