50

我有一个在 Intellij IDEA 中设置的小型 Web 应用程序的 Spring 项目。

它在 Hibernate 之上使用 JPA 作为持久层。数据源(MySQL)在 Spring 应用程序上下文中定义:

    <!-- Values are configured via the property override -->
    <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" >
        <property name="driverClassName" value=""/>
        <property name="url" value=""/>
        <property name="username" value=""/>
        <property name="password" value=""/>
    </bean>

实际值从属性文件中读取,并在运行时由 Spring 使用属性覆盖机制注入。

然后将数据源注入到同一应用程序上下文中的实体管理器工厂:

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="myDataSource"/>
    </bean>

最后,实体管理器使用注解注入 DAO:

/**
 * Shared, thread-safe proxy for the actual transactional EntityManager
 */
@PersistenceContext
private EntityManager em;

当我构建并将其部署到 Tomcat 时一切正常,但 Intellij 的 JPA 验证似乎不了解从何处获取数据源。

在我的实体中,表的名称和列的名称带有红色下划线,验证消息是“无法解析表”或“无法解析列”:

@Entity
@Table(name = "domain")
public class Domain extends AbstractAgendaEntity {

在此示例中,它"domain"是无效的部分。

我已经在“数据库”工具窗口中手动配置了我的数据库,我可以在控制台中查看我的表并执行 SQL 查询。

如何告诉 Intellij 使用此数据源来解析我的 JPA 实体的表名?

4

9 回答 9

136

我终于找到了如何做到这一点。

关键是“持久性”工具窗口。显然,它在您添加 JPA 方面后可用,但它是一个单独的工具窗口。

打开它:菜单“视图”->工具窗口->持久性

在这个窗口中,您会看到您的应用程序具有不同的持久性相关元素(我看到persistence.xmlentityManagerFactory来自 Spring 上下文,myUnit但我不知道它来自哪里。

在这里,您可以右键单击任何元素并选择“分配数据源”。 在此处输入图像描述

这将打开一个弹出对话框,其中包含一个小表,其中左列包含持久性元素,右列包含分配给它的数据源。您可以从那里的“数据库”窗口分配一个数据源,所以我选择了我为 MySQL DB 配置的数据源,瞧,验证错误消失了。

但是如果我输入了错误的表或列名,我仍然会得到一个错误,这非常简洁。

于 2013-01-16T12:32:13.893 回答
15

首先,您必须将数据源添加到您的 IDE 中。您通常可以在右侧的“数据库”选项卡中执行此操作。您可以从代码中导入此数据源。您应该确保点击按钮刷新表格。IDEA 将加载表并使用它们进行验证。然后你必须在你的 JPA 方面设置这个数据源。

于 2013-01-16T11:10:40.030 回答
6

您需要做几件事。首先,在您的项目结构配置中配置一个 Hibernate 方面。此时您可以选择您的 Hibernate 配置文件或创建一个新配置文件。然后您应该在数据库窗口(视图->工具窗口->数据库)中配置您的数据源。请记住在数据库窗口的“控制台”选项卡上设置数据库方言。最后,您需要转到 Persistence 窗口(View->Tools Window->Persistence)并将数据源添加到适当的方面。只需右键单击树中的右侧图标并选择“添加数据源”。数据源列有一个下拉菜单,其中包含您配置的所有数据源。IntelliJ 然后正确识别表。

一句话警告。从 v12.04 开始,IntelliJ 不会修改您的 Hibernate 配置文件。您仍然需要映射您的类并手动添加您的数据库详细信息。

于 2013-03-08T06:41:38.840 回答
3

对于 JPA 无法解析表/列。如果一切正常并且您只是对红色错误标记感到恼火,您可以将检查设置从错误更改为警告:-

File --> Settings --> Inspections --> JPA issues --> Unresolved database references in annotations.

于 2017-12-20T10:16:24.637 回答
1

除了像其他人提到的那样设置数据源之外,为了清除这些错误错误,在“数据库”面板中,我必须转到“设置”、“模式和表”选项卡,然后点击“information_schema”表左侧的复选框。数据库。

于 2015-11-17T22:43:53.463 回答
0

确保您正在导入javax.persistence.Tablejavax.persistence.Column在您的实体类中。

因此,在每个类的顶部检查:

import javax.persistence.Table;
import javax.persistence.Column;

这会将正确的 JPA 注释导入到您的类中。

于 2013-01-16T10:26:56.717 回答
0

我正确设置了数据源,但未显示列名。在我像下面这样更改架构和目录后,一切都被正确识别。

@Entity
@Table(name = "stock_detail", schema = "testing", catalog = "")
public class Xyz { 
    // ...
于 2017-10-19T14:41:51.003 回答
0

由于路径因您的想法版本而异。所以从 File --> Settings 只搜索: Unresolved database references。然后做任何你认为可以的事情:取消选中验证或更改严重性标志。

于 2020-11-24T15:53:51.940 回答
0

将鼠标光标停留在表名上一段时间,将出现上下文菜单,您可以在其中分配数据源。

于 2021-09-24T10:33:24.637 回答