如何在Hibernate中的本地SQL查询中冒号`:`? [英] How to escape colon `:` within a native SQL query in Hibernate?

查看:306
本文介绍了如何在Hibernate中的本地SQL查询中冒号`:`?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 查询查询= session.createSQLQuery(SELECT 
XMLSERIALIZE
(内容
XMLELEMENT

名称\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 \,,...)



但是我d o不希望Hibernate像这样解释,所以我想转义冒号



如何做到这一点?

解决方案

在Hibernate中,转义是用 \ 预先完成。但在Java中,您还必须通过另一个 \ 来转义 \ 。所以每一个都需要被 \\:取代。最后,你得到:

$ p $ 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 ...);


I have a native SQL query that looks like that :

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 ...");

The thing is that Hibernate interprets :DOAATLTC\", , :ltc\", , :ltchnom\", as parameters and expects that we give values query.setString("DOAATLTC\",", ...) , query.setString("ltc\",", ...) , query.setString("ltchnom\",", ...)

But I do not want Hibernate to interpret like that, so I want to escape the colon :.

How to do that ?

解决方案

In Hibernate, escaping is done with prepending by \. But in Java, you also have to escape \ by another \. So every : needs to be replaced by \\:. Finally, you get:

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中的本地SQL查询中冒号`:`?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆