【问题标题】:Hibernate: Error in named query because of colon ":" in commentHibernate:由于注释中的冒号“:”导致命名查询出错
【发布时间】:2016-01-26 18:22:03
【问题描述】:

我正在写一个原生 Sql namedQuery,它的插入语句如下所示:

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

运行上述块会出现异常:“命名查询中的错误”,但是当我从注释中删除冒号时,如下所示:

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

一切正常,有什么解释吗?

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

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

实际上,我花了几个小时才知道为什么会出现此异常,因为当我将插入语句复制到 Oracle Sql Developer 时,它看起来正确并且工作正常。它看起来是休眠命名查询解析器或其他东西的错误。

【问题讨论】:

标签: java hibernate exception


【解决方案1】:

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

您可以使用\ 转义:

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

【讨论】:

  • 使用 '\' 转义特殊字符有效,但这种行为仍然看起来很奇怪,因为休眠可以识别评论并忽略我在那里写的任何内容,然而,冒号 ':' 和问号 '?'还是把它弄糊涂了。
猜你喜欢
  • 2019-07-24
  • 2015-09-20
  • 2013-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
  • 2020-04-27
相关资源
最近更新 更多