Java Hibernate:命名查询中出现错误,原因是冒号“:&引用;评论

Java Hibernate:命名查询中出现错误,原因是冒号“:&引用;评论,java,hibernate,exception,Java,Hibernate,Exception,我正在编写一个本机Sql namedQuery,其insert语句如下所示: insert into myTable ( column1, column2) values( 'value1' ,'value2' /* value2: is very important */ ) insert into myTable ( column1, column2) values( 'value1' ,'value2' /* value2 is

我正在编写一个本机Sql namedQuery,其insert语句如下所示:

insert into myTable (
   column1,
   column2)
values(
   'value1'
   ,'value2' /* value2: is very important */
)
 insert into myTable (
    column1,
    column2)
 values(
    'value1'
    ,'value2' /* value2 is very important */
    )
运行上述块会出现异常:“命名查询中出错”,但当我从注释中删除冒号时,如下所示:

insert into myTable (
   column1,
   column2)
values(
   'value1'
   ,'value2' /* value2: is very important */
)
 insert into myTable (
    column1,
    column2)
 values(
    'value1'
    ,'value2' /* value2 is very important */
    )
一切正常,有什么解释吗

编辑: 我可以在这里复制我的真实陈述,但它确实很长。以上只是示例。 以下是异常stacktrace:

Caused by: org.hibernate.HibernateException: Errors in named queries: insertSalesDocument
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:435)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1385)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:860)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:779)
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
    ... 194 more
原因:org.hibernate.HibernateException:命名查询中的错误:insertSalesDocument
位于org.hibernate.impl.SessionFactoryImpl。(SessionFactoryImpl.java:435)
位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1385)
位于org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:860)
位于org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:779)
位于org.springframework.orm.hibernate3.AbstractSessionFactoryBean.AfterPropertieSet(AbstractSessionFactoryBean.java:211)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
... 194多

实际上,我花了几个小时才知道为什么会出现这种异常,因为当我将insert语句复制到Oracle Sql Developer时,它看起来是正确的,并且工作正常。这似乎是hibernate名为Query parser或其他什么的错误。

hibernate解析SQL并尝试在本机查询中查找任何参数。但是解析器是有限的,不会将注释识别为可忽略的内容

您可以使用
\
转义

insert into myTable (
   column1,
   column2)
values(
   'value1'
   ,'value2' /* value2\: is very important */
)

请努力将问题格式化。让它可读,这样人们会喜欢帮助你!更多细节:使用“\”转义特殊字符是可行的,但这种行为似乎仍然很奇怪,因为hibernate可以识别注释并忽略我在注释中写的任何内容,然而冒号“:”和问号“?”仍然会混淆注释。