【问题标题】:JPA EntityManager find entity by IDJPA EntityManager 按 ID 查找实体
【发布时间】:2020-05-28 12:12:28
【问题描述】:

我在使用 JPA EntityManager 时遇到了问题,尝试如下简单查询:


import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javax.persistence.*;
import tables.TeamMember;

public class BoburvikDatabase extends Application {

    public EntityManagerFactory emf;
    public EntityManager em;
    public BoburvikDatabase BD;
    public Stage primaryStage;

    @Override
    public void start(Stage primaryStage) {
        this.primaryStage = primaryStage;
        emf = Persistence.createEntityManagerFactory("BoburvikDatabasePU");    
        em = emf.createEntityManager();
        this.BD = this;
        TypedQuery<TeamMember> q1 = em.createQuery(
                "SELECT * FROM \"TeamMember\" WHERE \"MEMBER_ID\"=1000;",
                TeamMember.class

        );
        TeamMember result = q1.getSingleResult();
        System.out.println(result);

        em.close();
    }

    public static void main(String[] args) {
        launch(args);
    }

}

但我收到错误消息:

    [27, 27] A select statement must have a FROM clause.
    [7, 7] The left expression is missing from the arithmetic expression.
    [9, 27] The right expression is not an arithmetic expression.
    [47, 52] '1000;' is not a valid numeric value.

实体类包含在持久性单元中,我尝试在 pgAdmin 中运行 SQL 命令并且它有效,我认为从输出中的这一行判断我正在连接到数据库:

    [EL Info]: connection: 2020-05-28 13:58:17.977--ServerSession(927866519)-- 
    file:/D:/Java/boburvik/BoburvikDatabase/dist/run285579090/BoburvikDatabase.jar_BoburvikDatabasePU 
    login successful

有什么想法可能是错误所在吗?

【问题讨论】:

    标签: java sql jpa


    【解决方案1】:

    当您使用 EntityManager 时,您正在创建 JPQL(Java 持久性查询语言语句)。它们由 EntityManager 转换为 SQL 语句。

    因此,请尝试以下 JPQL 查询,而不是您的 SQL 查询:

    "SELECT t FROM TeamMember t WHERE memberId=1000",
    

    其中“memberId”是您的 TeamMember 实体中 MEMBER_ID 的 propertyName(否则请更改)。对于高级查询,您不应将参数放在查询字符串中,而应使用查询参数。

    有关更多信息,请查看 Java 持久性查询语言。

    如果需要,您还可以使用 EntityManager 执行本机 SQL 查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 2014-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多