IntelliJ IDEA 在 JPQL 中用“无法解析符号”突出显示 @Entity 类名
Posted
技术标签:
【中文标题】IntelliJ IDEA 在 JPQL 中用“无法解析符号”突出显示 @Entity 类名【英文标题】:IntelliJ IDEA highlights @Entity class names with "Cannot resolve symbol" in JPQL 【发布时间】:2012-09-07 09:51:27 【问题描述】:IntelliJ IDEA 在 JPQL 中用红色“无法解析符号”突出显示持久性 @Entity 类名称,这会分散注意力并掩盖实际问题。
因此,例如,我在我的存储库中声明一个查询:
private static final String READ_BY_CANDIDATE_KEY = "SELECT cr FROM Entity AS cr left join cr.relationship AS re left join fetch cr.relationship2 WHERE re.candidateKey=:ID";
.. 和“Entity”带有下划线,即使“Entity”是一个有效的类名,并且有 @Entity 注释。代码实际运行时,没有问题。
我想需要进行某种配置才能让 IDE 知道哪些类是有效的?那个配置是怎么做的?
更新:我确实有一个 JPA 方面,但它没有看到带注释的类。它似乎需要一个 persistence.xml 或 orm.xml(我的项目没有使用)
【问题讨论】:
【参考方案1】:确保您的模块在 IntelliJ IDEA 中有 JPA 或 Hibernate facet configured。
【讨论】:
你在使用 Spring 吗?如果是这样,则需要 Spring facet。 您能否提供有关如何执行上述操作的说明? 如果您使用 Spring 作为您的 JPA 配置(没有 persistence.xml),只需创建一个 JPA facet 并设置默认的 JPA Provider。无需指定 xml 文件。 您还必须右键单击“持久性”菜单中的根项目并点击“分配数据源...”,然后选择您的数据库,您应该一切就绪 @Amalgovinus 对于 Spring Boot 应用程序,没有什么可供选择的。即使您手动创建 JPA 和/或 Hibernate 构面,列表仍为空。【参考方案2】:您似乎没有在构面配置中选择默认的 JPA 提供程序。根据您使用的提供商,从列表中选择一个。可用选项包括 EclipseLink、Hibernate、OpenJPA、TopLink
【讨论】:
我在哪里设置呢? 转到文件 > 项目结构 > 方面。然后单击 + 图标并将 JPA 添加到您的项目/模块中。完成此操作后,您可以选择默认 JPA 提供程序。【参考方案3】:文件 -> 项目结构
在左侧窗格中选择“构面”。如果没有列出 JPA,请单击“+”号并添加“JPA”
在同一对话框的底部,在“Default JPA Provider”中,选择 - “Hibernate”,按“OK”
如果@Table注解有错误,配置并选择数据源
现在选择的表名应该被识别为实体类名
【讨论】:
【参考方案4】:如果您使用的是 Spring-boot,请尝试添加此依赖项。 spring-boot-starter-data-jpa
【讨论】:
【参考方案5】:如果您使用 Spring Boot 和 maven,请在您的 pom.xml
文件中添加此依赖项。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
【讨论】:
【参考方案6】:有时 JPA Buddy 插件会阻止 springboot JPA 配置。确保这不是导致问题的原因。
【讨论】:
我是 JPA Buddy 开发团队的负责人。所以,我想知道你提到了什么案例?因为我们从来没有遇到过这样的事情,甚至没有接触过配置部分......请您提供更多信息,以便我们可以解决如果存在的问题。以上是关于IntelliJ IDEA 在 JPQL 中用“无法解析符号”突出显示 @Entity 类名的主要内容,如果未能解决你的问题,请参考以下文章
如何使用正则表达式在 Intellij IDEA 中用小写替换大写?
IntelliJ IDEA中用git提交代码时忽略文件的设置
intellij idea中用java打开文件中文怎么变成乱码了?我用的是UTF-8啊
IntelliJ IDEA部署tomcat时Edit Configuration Deployment无artifact选项