首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >org.hibernate.hql.internal.ast.QuerySyntaxException

org.hibernate.hql.internal.ast.QuerySyntaxException
EN

Stack Overflow用户
提问于 2015-03-27 07:30:23
回答 2查看 10.4K关注 0票数 2

我得到了这个错误:

代码语言:javascript
复制
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 server数据库。

JPA:

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
<?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>

我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2015-03-27 07:39:50

您正在将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,请不要使用EntityManager和相关的JPA类。不过,您似乎可以将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/

票数 2
EN

Stack Overflow用户

发布于 2016-04-11 20:03:19

您尚未在persistence.xml配置文件中声明实体类:

代码语言:javascript
复制
<property name="hibernate.archive.autodetection" value="class, hbm"/>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29290750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档