代码之家  ›  专栏  ›  技术社区  ›  Riya Doshi

如何在hibernate中编写sql查询?[副本]

  •  0
  • Riya Doshi  · 技术社区  · 2 年前

    我有一个本地SQL查询,看起来像这样:

    Query query = session.createSQLQuery("SELECT
            XMLSERIALIZE
            (CONTENT
              XMLELEMENT
              (
                NAME \"ltc:DOAATLTC\",
                XMLATTRIBUTES
                (
                  'http://www.edftrading.com/Trade/Common/DoaatLTC' AS \"xmlns:ltc\",
                  'http://www.edftrading.com/Trade/Common/DoaatLTCHourlyNomination' AS \"xmlns:ltchnom\"
                ),
                XMLELEMENT ( ... ) FROM ...");
    

    问题是Hibernate解释 :DOAATLTC\", , :ltc\", , :ltchnom\", 作为参数,并期望我们给出值 query.setString("DOAATLTC\",", ...) , query.setString("ltc\",", ...) , query.setString("ltchnom\",", ...)

    但我不想让Hibernate这样解释,所以我想避开冒号 : .

    怎么做?

    0 回复  |  直到 9 年前
        1
  •  29
  •   Tunaki    9 年前

    在Hibernate中,转义是通过前缀完成的 \ 。但在Java中,你也必须逃脱 \ 另一个 \ 因此,每 : 需要替换为 \\: 。最后,您将得到:

    Query query = session.createSQLQuery("SELECT
        XMLSERIALIZE
        (CONTENT
          XMLELEMENT
          (
            NAME \"ltc\\:DOAATLTC\",
            XMLATTRIBUTES
            (
              'http://www.edftrading.com/Trade/Common/DoaatLTC' AS \"xmlns\\:ltc\",
              'http://www.edftrading.com/Trade/Common/DoaatLTCHourlyNomination' AS \"xmlns\\:ltchnom\"
            ),
            XMLELEMENT ( ... ) FROM ...");
    
        2
  •  8
  •   rogerdpack    4 年前

    如果你的结肠像石膏一样 SELECT reltuples::BIGINT 然后你可以把它重写为 cast(reltuples as BIGINT) 为了避开冒号。

    ref