【问题标题】:Jpa project where is annotation @NamedQueriesJpa 项目在哪里注解@NamedQueries
【发布时间】:2025-12-18 20:25:01
【问题描述】:

我有一个 maven 项目,我想使用 JPA。

我的 pom.xml 是

<dependencies>

        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>javax.persistence</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>javax.transaction</groupId>
            <artifactId>jta</artifactId>
            <version>1.1</version>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.197</version>
        </dependency>
    </dependencies>

我有以下课程

package edu.javacd.reviewservice;

import javax.persistence.Entity;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

    @Entity
    @Table(name = "REVIEW")
    @NamedQueries({ @NamedQuery(name = "Review.findAll", query = "SELECT r FROM Review r"),
    @NamedQuery(name = "Review.findById", query = "SELECT r FROM Review r WHERE r.id = :id"),
    @NamedQuery(name = "Review.findByMovieId", query = "SELECT r FROM Review r WHERE r.movieId = :id") })
    public class Review implements Serializable {
    }

如何配置 pom.xml 以使用注解 @NamedQueries

【问题讨论】:

  • 您的 Eclipse "javax.persistence" jar 具有该注释,但是您可以轻松打开该 jar 并亲自查看它...

标签: java maven jpa


【解决方案1】:

编辑:注释在这个包中:javax.persistence.NamedQueries 通常你的 pom.xml 已经配置为你使用 @NamesQueries 注释。

编辑:而且您缺少 EclipseLink 实现依赖项:

查看这个旧帖子:How to setup Eclipselink with JPA?

您的 3 个依赖项(它们是外部库)分别代表:

  • 编辑:JPA 注释
  • JPA 的事务管理
  • H2 数据库的 JDBC 驱动程序

此注释允许您列出将在程序中使用的所有查询及其 sql 语句。无需在代码中直接输入 sql 语句,您将拥有如下内容:

Query query = em.createNamedQuery("Review.findAll");
List results = query.getResultList();

【讨论】:

  • 不完全。第一个是 EclipseLink 自己的标准 JPA API jar 版本。这不是他们对 JPA 的实现。这是包含该注释的罐子,正如我在上面的评论中所说,您的回答无法告诉人们他们为什么会遇到问题
  • 除非持久化 api(或其他依赖于它的东西)被包含为依赖项,否则 pom 不会被配置为使用 @NamedQueries。
【解决方案2】:

您将在 java persistence api 中找到 @NamedQueries 注释和您提到的其他注释(@Entity、@Table、@NamedQuery)。在你的 pom.xml 中添加它的 coordinates(或其他使用它的库,如 Hibernate、WildFly 等)作为依赖项以使用它们:

<dependency>
    <groupId>javax.persistence</groupId>
    <artifactId>javax.persistence-api</artifactId>
    <version>2.2</version>
</dependency>

【讨论】: