繁体   English   中英

JPA EntityManager 通过 ID 查找实体

[英]JPA EntityManager find entity by ID

我在使用 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 命令并且它起作用了,我想我正在连接到数据库,从 output 中的这一行判断:

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

任何错误可能出在哪里的想法?

当您使用 EntityManager 时,您正在创建 JPQL(Java 持久性查询语言语句)。 它们被 EntityManager 翻译成 SQL 语句。

因此,不要使用 SQL 查询,而是尝试使用此 JPQL 查询:

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

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

有关详细信息,请查找 Java 持久性查询语言。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM