JPA EntityManager найти объект по идентификатору - PullRequest
0 голосов
/ 28 мая 2020

У меня проблемы с работой с 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.

Классы сущностей включены в блок сохранения состояния, я попытался запустить команду SQL в pgAdmin, и она сработала, и я думаю, что подключаюсь к базе данных, судя по этой строке в выводе:

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

Любые идеи, где неисправность могла быть?

1 Ответ

2 голосов
/ 28 мая 2020

Когда вы работаете с EntityManager, вы создаете JPQL (Java операторы языка запросов сохраняемости). Они переводятся в SQL утверждения с помощью EntityManager.

Поэтому вместо запроса SQL попробуйте этот запрос JPQL:

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

Где memberId - это propertyName для MEMBER_ID в ваша сущность TeamMember (в противном случае измените). Для сложных запросов не следует помещать параметры в строку запроса и вместо этого использовать параметры запроса.

Для получения дополнительной информации см. Java Язык запросов сохраняемости.

Вы также можете использовать собственный SQL запросы с EntityManager, если вам это нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...