JPA无法解析列/ IntelliJ

时间:2015-03-19 21:29:12

标签: java hibernate jpa intellij-idea mapping

我尝试使用Hibernate JPA实现映射一些Java类。我的问题是我不能使用硬编码的Strings als列名。您可以在下面的图片中看到我收到的错误消息。

enter image description here

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

IntelliJ版本14.0.3

的问候,

8 个答案:

答案 0 :(得分:71)

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

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

  1. 打开“持久性”工具窗口(“查看”|“工具窗口”| 持久性)。
  2. 右键单击必要的模块,持久性单元或 会话工厂,并在上下文菜单中选择分配数据源。
  3. 在打开的“分配数据源”对话框中,单击“数据源” 字段并选择必要的数据源。 (要删除 与数据源关联,选择。)
  4. 见这里:Associating data sources with session factories and persistence units

答案 1 :(得分:11)

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

选择查看/工具Windows /数据库

数据库窗口通常显示在右上角。

在数据库窗口中,单击绿色 + 符号并选择数据源/ MySQL (或您正在使用的任何数据源风格)。

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

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

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

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

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

尽管自动提交自动同步的复选框默认为已检查并且我将其留下,但IDEA似乎需要轻推。或许这只是需要一段时间而且我很不耐烦。

无论如何,首先我在数据库中双击我的数据库行。这似乎是这样做的,但我还没有意识到我还需要持久性,并且在对其进行排序时,根据同事的建议,我还点击了同步按钮(两个) 数据库上的圆圈中的箭头。

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

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

最后,我找到了Panos的答案并修复了持久性

选择查看/工具Windows /持久性

“持久性”窗口通常显示在左上角。

在“持久性”窗口中,右键单击项目并选择分配数据源

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

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

答案 2 :(得分:1)

对于那些只想禁用此检查的人,请转至 Intellij IDEA->首选项->搜索“ 注释中未解决的数据库引用”,然后取消选中它。 enter image description here (macOS Mojave和Intellij Ultimate 2019.3)
这将禁用检查并删除@Column批注中的所有“无法解析列...”错误。 Intellij将停止检查数据库表中是否存在字符串列名称。后果自负。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

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

这可以通过项目

来完成
  

设置 - >语言和框架

IDE的一部分。

答案 5 :(得分:0)

对于其他无法解决问题并通过google遇到的人(例如我自己)..通过@Table Annotation设置表名的问题为我解决了。

答案 6 :(得分:0)

如果没有真正的不匹配,并且仅由于IDE而发生此警告,则可以轻松地将项目链接到所连接的数据源。 Intellij已经提出了解决方法。

答案 7 :(得分:0)

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

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