Как решить проблему «Имя X не является распознанным объектом или идентификатором.»? - PullRequest
0 голосов
/ 17 октября 2019

У меня проблема с выполнением запроса с использованием JPA в проекте maven для школы. Проблема в The name "Booking" is not a recognized entity or identifier. У меня есть таблица с именем Booking, и компилятор, похоже, не находит ее в проекте, хотя у меня есть ссылка на нее в persistence.xml. Также я перешел от простого проекта JPA к проекту maven с поддержкой JPA, и у меня не было проблем.

Файл Persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" >
    <persistence-unit name="Lab_4_Maven">
        <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
        <class>model.Booking</class>
        <class>model.Category</class>
        <class>model.Flight</class>
        <class>model.Passenger</class>
        <class>model.Ticket</class>

    </persistence-unit>

</persistence>
private static void readEntities(EntityManagerFactory emf) {
    EntityManager em;
    em = emf.createEntityManager();
    em.getTransaction().begin();

    try {
        //problem is here
        Query query = em.createQuery("SELECT x FROM Booking x");

        List<?> list = query.getResultList();

        if (!list.isEmpty()) {

            for (Object object : list) {
                Date date = ((Booking)object).getDate();
                String paid = ((Booking)object).getPaid();
                long passengerCode = ((Booking)object).getPassenger_Code();
                BigDecimal flightCode = ((Booking)object).getFlight_Code();
                BigDecimal bookingCode = ((Booking)object).getBooking_Code();
                System.out.println("PassengerCode = " + passengerCode
                        + ", FlightCode = " + flightCode.toString() + ", BookingCode = " 
                        + bookingCode.toString() + ", Date = " + date.toString() 
                        + "Paid = " + paid);
            }

        } else {
            System.out.println("No booking");
        }

        em.getTransaction().commit();

    } catch (Exception e) {
        e.printStackTrace();

        em.getTransaction().rollback();
    } finally {

        em.close();
    }
}

Ошибка:

Oct 17, 2019 8:05:16 PM org.hibernate.jpa.boot.internal.PersistenceXmlParser doResolve
INFO: HHH000318: Could not find any META-INF/persistence.xml file in the classpath
123  INFO   [main] openjpa.Runtime - OpenJPA dynamically loaded the class enhancer. Any classes that were not enhanced at build time will be enhanced when they are loaded by the JVM.
148  INFO   [main] openjpa.Runtime - Starting OpenJPA 3.1.0
230  INFO   [main] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.PostgresDictionary".
488  INFO   [main] openjpa.jdbc.JDBC - Connected to PostgreSQL version 11.11 using JDBC driver PostgreSQL JDBC Driver version 42.2.8.
<openjpa-3.1.0-rafcec21a1d489dff682a3ce7986fac6a1c80e8e0 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: An error occurred while parsing the query filter "SELECT x FROM Booking x". Error message: The name "Booking" is not a recognized entity or identifier. Known entity names: []
    at org.apache.openjpa.kernel.exps.AbstractExpressionBuilder.parseException(AbstractExpressionBuilder.java:118)
    at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getClassMetaData(JPQLExpressionBuilder.java:200)
    at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.resolveClassMetaData(JPQLExpressionBuilder.java:170)
    at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateMetaData(JPQLExpressionBuilder.java:245)
    at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateMetaData(JPQLExpressionBuilder.java:215)
    at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateType(JPQLExpressionBuilder.java:208)
    at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.access$200(JPQLExpressionBuilder.java:81)
    at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder$ParsedJPQL.populate(JPQLExpressionBuilder.java:2456)
    at org.apache.openjpa.kernel.jpql.JPQLParser.populate(JPQLParser.java:64)
    at org.apache.openjpa.kernel.ExpressionStoreQuery.populateFromCompilation(ExpressionStoreQuery.java:175)
    at org.apache.openjpa.kernel.QueryImpl.newCompilation(QueryImpl.java:719)
    at org.apache.openjpa.kernel.QueryImpl.compilationFromCache(QueryImpl.java:692)
    at org.apache.openjpa.kernel.QueryImpl.compileForCompilation(QueryImpl.java:659)
    at org.apache.openjpa.kernel.QueryImpl.compileForExecutor(QueryImpl.java:728)
    at org.apache.openjpa.kernel.QueryImpl.compile(QueryImpl.java:627)
    at org.apache.openjpa.persistence.EntityManagerImpl.createQuery(EntityManagerImpl.java:1168)
    at org.apache.openjpa.persistence.EntityManagerImpl.createQuery(EntityManagerImpl.java:1149)
    at org.apache.openjpa.persistence.EntityManagerImpl.createQuery(EntityManagerImpl.java:108)
    at model.Test.readEntities(Test.java:65)
    at model.Test.main(Test.java:27)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...