Intellij IDEA:为 JPA 验证指定数据源

2022-08-31 20:42:38

我有一个在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 实体的表名?


答案 1

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

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

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

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

在这里,您可以右键单击任何元素,然后选择“分配数据源”。enter image description here

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

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


答案 2

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


推荐