为什么Hibernate查询在IntelliJ中有编译错误?

Mar*_*eon 18 hibernate intellij-idea

我有这个Hibernate代码:

Query q = session.createQuery("from MyTable where status = :status");
Run Code Online (Sandbox Code Playgroud)

它编译和工作正常..

但是在IntelliJ中我报告了这个错误:

无法解析表达式,无法解析符号'MyTable'

为什么IntelliJ会抱怨?

tum*_*nov 24

在"项目结构"下添加"Hibernate"Facet,然后为该Facet选择"Hibernate配置"的"hibernate.cfg.xml"文件.这将让IDEA了解您的类到表映射,并将帮助它识别HQL查询中的这些类.

如果您不使用"hibernate.cfg.xml",例如对于Spring,您可以使用"applicationContext.xml"来初始化您的数据源,声明Hibernate Facet就足够了.

  • 请注意,如果使用xml映射,则此答案优先于关闭检查.这是一个简单的设置,它可以帮助很多. (3认同)

Mic*_*ale 20

IntelliJ正在尝试在字符串本身内验证您的HQL查询.要做到这一点,需要配置它以了解你的hibernate配置,以确保MyTable存在一个映射(它在运行时,如你所知 - 在执行时!).

查看项目的intelliJ中的hibernate配置部分.

如果它更多的是障碍而不是帮助,那么可能有一种方法可以将其关闭.

  • @Marcus thx 4这个线索!在IDEA13中,我认为此设置已被移动/重命名,但在"设置" - >"检查"对话框的搜索框中键入"query"会在JPA问题下显示它... (6认同)
  • 谢谢.它实际上是Java EE问题\持久性QL问题下的一个设置.把它关了,我很好. (3认同)

小智 18

确保正确配置了Facets.我的Spring Data JPA @Query注释中出现了"无法解析符号"的错误(仅在IntelliJ IDEA中;代码本身在运行时工作正常)我需要进入Project Structure,Facets并添加JPA面.(我假设一个人在没有JPA的情况下使用Hibernate,那么就可以添加Hibernate方面而不是JPA方面.)


Bra*_*ten 6

在Mac OS XI的IntelliJ IDEA 13中,可以在“ JPA问题”下找到此选项作为“查询语言检查”。