JPA 无法解析 column/IntelliJ

JPA Cannot resolve column/IntelliJ

我正在尝试使用 Hibernate JPA 实现映射一些 Java 类。我的问题是我不能使用硬编码字符串作为列名称。你可以在下图中看到我得到的错误信息。

我正在使用 OpenJPA 作为我的默认 JPA 提供程序并且已经尝试更改它。

IntelliJ 版本 14.0.3

问候,

实际上这不是任何阻止您的代码编译的错误。可能是你的拼写检查器打开了,这给了你拼写错误。如果您可以编译您的代码,那么您可以忽略这些类型的场景。

看起来你没有收到任何其他文本的错误,如 @Column@GeneratedValue 等。这意味着使用这些东西的罐子在你的构建路径中。所以我认为你可以忽略这些类型的错误。

您必须将您的数据源(首先在数据库视图中创建数据源 - 即您的真实 JDBC 数据库连接)与持久性单元或会话工厂 (hibernate.cfg.xml) 相关联。

按照以下步骤操作,警告就会消失:

  1. 打开持久化工具 window(视图 | 工具 Windows | 坚持)。
  2. 右键单击必要的模块、持久性单元或 会话工厂,以及 select 在上下文菜单中分配数据源。
  3. 在打开的“分配数据源”对话框中,单击“数据源” 字段和 select 必要的数据源。 (要删除 与数据源的关联,select .)

看这里:Associating data sources with session factories and persistence units

我发现 Panos 的回答很有用,但我没有看到有人提到将数据库添加为数据源。也许这足以被认为是例行公事,但如果不是,这就是我必须做的:

Select View/Tool Windows/Database

数据库window通常出现在右上角。

在数据库 window 中,单击绿色 + 符号和 select Data Source/MySQL(或您正在使用的任何类型的数据源)。

弹出数据源和驱动程序window。

如果您的数据库未在此处列出,请使用空表格添加以下内容:

  • Host: 通常是本地主机,但是如果你的测试数据库是活的 在另一台机器上,把那个地址放进去。
  • 用户名:供您数据库使用。

  • 密码: 为您的数据库用户的密码。

IDEA 可能需要一些操作才能找到 JDBC 驱动程序。有人告诉我,理论上它应该在我正在处理的项目的 Maven 构建过程中找到它,但它没有。我重新打开 View/Tool Windows/Database 并查看了我的 MySQL 条目。在底部,它在 Driver: 旁边有一条错误消息,还有一条 MySQL link。我单击了 MySQL link 并且 IDEA 弹出了一个弹出窗口来获取 Connector/J.

尽管 Auto commitAuto sync 的复选框默认选中并且我就这样离开了,IDEA 似乎需要一个推动。或者也许只是需要一段时间,我不耐烦。

无论如何,首先我在 Database 中双击了我的数据库所在的行。这似乎做到了,但我还没有意识到我需要 Persistence,在解决这个问题时,根据同事的建议,我还单击了 Synchronize[= 数据库.

上的 74=] 按钮(圆圈中的两个箭头)

您也可以在 Database 和 select Synchronize.

中右键单击您的数据库

这可能需要几秒钟,但您应该会看到 IDEA 在数据库条目下填充数据库模式。

最后我找到了 Panos 的答案并修复了 Persistence

Select View/Tool Windows/Persistence

持久性 window 通常出现在左上角。

在 Persistence window 中,右键单击您的项目并 select Assign Data Sources.

IDEA 会弹出一个包含两列的对话框,您的项目在左列,在我的例子中,右列是一个空单元格。单击空白单元格,IDEA 应该会为您提供一个下拉列表,允许您 select 您刚添加的数据库。

同样,IDEA 完成数据源分析并重做所有检查可能需要几秒钟。

如果您使用的是 JPA,将 SQL 方言设置为也很重要 HSQLDB 而不是 MySQL。这常常令人困惑,因为感觉 MySQL 是正确的方言,但实际上你正在处理 hibernate 的是 HSQL.

如果您刚刚升级到 IntelliJ 2017.13 或该版本的其他衍生版本(例如 Webstorm),或者您刚刚重新导入了您的项目,则可能会导致语言注入混乱,需要手动更正。

这可以通过项目

Settings -> Languages and Frameworks

IDE的一部分。

对于只想禁用此检查的用户,请转到 Intellij IDEA -> 首选项 -> 搜索“Unresolved database references in annotations”并取消勾选。 (macOS Mojave 和 Intellij Ultimate 2019.3)
这将禁用检查并删除 @Column 注释上的所有 "Cannot resolve column…" 错误。 Intellij 将停止检查数据库表中是否存在 String 列名称。风险自负。

仅供其他未解决并通过 google 遇到的人(比如我自己).. 通过 @Table 注释设置 table 名称修复它我。

如果没有真正的不匹配并且此警告只是因为 IDE 而发生,您可以轻松地 link 您的项目与您连接的数据源。 Intellij 已经建议了这样做的方法。

我正在使用 Intellij 并通过 JPA 连接数据库。我遇到过和你一样的问题,这就是我的解决方案。

  1. 您需要按照以下步骤连接数据库:
  • 查看 -> 工具 Windows -> 数据库 -> 然后将你正在使用的数据库添加到 Intellj
  1. 连接数据库后,您需要按照以下步骤将数据源分配给Intellj
  • View -> Tool Windows -> Persistence -> 然后从第一步添加的数据库中添加数据 好的。就这样! P/s:确保您的代码运行良好!