org.hibernate.hql.internal.ast.QuerySyntaxException

Я получаю эту ошибку:

Caused by: javax.ejb.EJBException: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: TblEmployee is not mapped [FROM TblEmployee]
    Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: TblEmployee` is not mapped

Я исследовал Интернет, и там написано, что я использую не имя класса, а имя таблицы. Я убедился, что я делаю это правильно. Я пытаюсь подключиться к серверу базы данных sql.

JPA:

package com.ray.adtf.jpa;

import java.io.Serializable;
import javax.persistence.*;
import java.sql.Timestamp;
/**
 * The persistent class for the tblEmployee database table.
 */

@Entity
@Table(name="tblEmployee")
@NamedQuery(name="TblEmployee.findAll", query="SELECT t FROM TblEmployee t")
public class TblEmployee implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="EmployeeID")
    private int employeeID;

ejbpackage

com.ray.adtf.ejb;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import com.ray.adtf.jpa.TblEmployee;
import java.util.List;

@Stateless
public class GridMasterBean {

    @PersistenceContext
    private EntityManager em;

        public List<TblEmployee> getDisplayGridList() {
            return em.createQuery("select t FROM TblEmployee t", TblEmployee.class).getResultList();

    }

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
 <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
 <persistence-unit name="Test-Persistence" transaction-type="RESOURCE_LOCAL">
 <jta-data-source>java:/ProgramHierarchy</jta-data-source>
 <class>com.ray.adtf.jpa.TblEmployee</class>
 <class>com.ray.adtf.jpa.TblProgram</class>
 <exclude-unlisted-classes>false</exclude-unlisted-classes>
 </persistence-unit>
 </persistence>

Что я делаю неправильно?

2 ответа

Вы смешиваете HQL с классами JPA.

EntityManager из JPA. Запрос JPA будет ожидать, что вы используете JPQL (JPA Query Language), как и подготовленный запрос в сущности (SELECT t FROM TblEmployee t)

Сейчас, FROM TblEmployee HQL (Hibernate Query Language), вы должны использовать его, когда вы используете Hibernate не как поставщик JPA, а напрямую (используя классы Hibernate, такие как Session).

Короче:

Если вы включаете импорт из java.persistence, не добавлять импорт из org.hibernate и использовать JPQL (начинается с SELECT).

Если вы используете Hibernate напрямую, не используйте классы JPA, такие как EntityManager и связанные. Похоже, что вы можете использовать JPQL или HQL с запросами Hibernate.

Некоторые думали, что еда:

http://docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html/ch11.html

http://what-when-how.com/hibernate/querying-with-hql-and-jpa-ql-hibernate/

Вы не объявили свои классы сущностей в файле конфигурации persistence.xml:

<property name="hibernate.archive.autodetection" value="class, hbm"/>
Другие вопросы по тегам