我收到此错误:
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服务器db。
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>
我做错了什么?
答案 0 :(得分:1)
您正在将HQL与JPA类混合使用。
EntityManager
来自JPA。 JPA的Query将期望您使用JPQL(JPA查询语言),就像实体中准备好的查询一样(SELECT t FROM TblEmployee t
)
现在,FROM TblEmployee
是HQL(Hibernate查询语言),当你不使用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/
答案 1 :(得分:0)
您尚未在persistence.xml配置文件中声明您的实体类:
<property name="hibernate.archive.autodetection" value="class, hbm"/>