【问题标题】:JPA Cannot resolve column/IntelliJJPA 无法解析列/IntelliJ
【发布时间】:2015-05-23 04:51:33
【问题描述】:

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

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

IntelliJ 版本 14.0.3

问候,

【问题讨论】:

  • 所有这些答案都让生活变得如此复杂。今天最明显的解决办法是右键列或表,选择数据源,固定*翻白眼表情*。

标签: java hibernate jpa intellij-idea mapping


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      仅适用于其他没有解决并通过谷歌遇到的人(比如我自己)..通过@Table Annotation 设置表名为我修复了它。

      【讨论】:

      • 也对我有用。但是命名策略之间肯定存在某种错误配置,我不知道是什么,因为它应该在没有指定的情况下工作。
      【解决方案4】:

      对于那些只想禁用此检查的人,请转到 Intellij IDEA -> Preferences -> 搜索“Unresolved database references in annotations”并取消选中它。 (macOS Mojave 和 Intellij Ultimate 2019.3)
      这将禁用检查并删除 @Column 注释上的所有“无法解析列...”错误。 Intellij 将停止检查数据库表中是否存在字符串列名。风险自负。

      【讨论】:

      • 谢谢。使用多个数据源时,此检查非常烦人
      • 谢谢你。请发送一个 Karen 去投诉 JetBrains 的项目经理,他认为应该默认启用此功能。
      【解决方案5】:

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

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

      1. 打开 Persistence 工具窗口(查看 | 工具窗口 | 坚持)。
      2. 右键单击必要的模块、持久性单元或 会话工厂,然后在上下文菜单中选择分配数据源。
      3. 在打开的“分配数据源”对话框中,单击“数据源” 字段并选择必要的数据源。 (要删除 与数据源关联,选择 。)

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

      【讨论】:

      • 正确答案,因为它解释了行为并提供了解决方案,而另一个只是告诉您忽略它。
      • @panos 这仅修复了@Table 错误,但我的列仍然显示为无法解决。知道如何解决这个问题吗?
      • 您可以检查的其他内容是生成/编码的实体类的名称,与数据库中的表具有相同的名称...如果没有,请使用实体注释的名称属性以匹配表。例如:@Entity(name="yourTableName")
      • @DonRhummy 我有同样的问题。当我使用完全限定名称时,它就消失了:.。 IntelliJ 甚至开始自动完成列名。
      • 我已经这样做了,只有实体名称是可识别的,但是,列名仍然是意外的,如何摆脱这个?
      【解决方案6】:

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

      选择查看/工具窗口/数据库

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

      在“数据库”窗口中,单击绿色 + 符号并选择 Data Source/MySQL(或您正在使用的任何类型的 Data Source)。

      数据源和驱动程序窗口弹出。

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

      • 主机: 通常是本地主机,但如果您的测试数据库是活动的 在另一台机器上,输入该地址。
      • 用户名:供您的数据库使用。

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

      IDEA 可能需要一些麻烦才能找到 JDBC 驱动程序。有人告诉我,理论上它应该在我正在从事的项目的 maven 构建过程中找到它,但事实并非如此。我重新打开了 View/Tool Windows/Database 并查看了我的 MySQL 条目。在底部,Driver: 旁边有一条错误消息,还有一个 MySQL 链接。我点击了 MySQL 链接,IDEA 弹出一个窗口来获取 Connector/J。

      尽管 Auto commitAuto sync 的复选框默认为选中状态并且我将它们保留为这样,但 IDEA 似乎需要轻推。或者也许只是需要一段时间,我很不耐烦。

      无论如何,首先我在数据库中双击我的数据库行。似乎可以做到这一点,但我还没有意识到我需要 Persistence,在解决这个问题时,在同事的建议下,我还单击了 Synchronize 按钮(两个数据库上的箭头)。

      您也可以在数据库中右键单击您的数据库,然后选择同步

      这可能需要几秒钟,但您应该会看到 IDEA 在数据库中的条目下填写数据库架构。

      最后我找到了帕诺斯的答案并修复了持久性

      选择查看/工具窗口/持久性

      Persistence 窗口通常出现在左上角。

      在 Persistence 窗口中,右键单击您的项目并选择 Assign Data Sources

      IDEA 会弹出一个包含两列的对话框,您的项目在左列,在我的例子中,右列是一个空单元格。点击空白单元格,IDEA 会为您提供一个下拉菜单,让您可以选择刚刚添加的数据库。

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

      【讨论】:

      • Assign Data Sources 下的右栏很难看!到现在都没注意到!谢谢!
      • 史蒂文的回答是有道理的,而不是假设与配置相关的事情。必须提及。
      【解决方案7】:

      如果您使用 JPA,将 SQL 方言设置为 HSQLDB 代替 MySQL。这常常令人困惑,因为感觉 MySQL 是正确的方言,但实际上您处理的 hibernate 是 HSQL。

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

      这可以通过项目来完成

      设置 -> 语言和框架

      IDE 的一部分。

      【讨论】:

      • 这是不正确的,HSQLDB 是一种叫做 HyperSQL 的东西,与休眠无关。但升级到 IDEA 2017 后似乎确实存在一些配置问题,在将配置导入到它后我得到“无法解析列”。
      【解决方案8】:

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

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

      【讨论】:

      • 感谢您的回答。但是为什么 @Column(name = myConstant) 可以接受? myConstant 类似于 'static final String myConstant = "LEC_ID") Java 中的硬编码字符串和常量不一样吗?
      猜你喜欢
      • 1970-01-01
      • 2013-12-09
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      相关资源
      最近更新 更多