0

我已将 java 类名作为“Employee”和 db 表名作为“EMPLOYEE”的类。该表有很多列,但我在员工类上只声明了两个变量。以下是Employee类的代码:

package com.mmi.education;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="EMPLOYEES")
public class Employee {
    private int id;
    private String firstname;
    private String lastname;

    @Id
    @Column(name="EMPLOYEE_ID")
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }

    @Column(name="FIRST_NAME")
    public String getFirstname() {
        return firstname;
    }
    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }
    @Column(name="LAST_NAME")
    public String getLastname() {
        return lastname;
    }
    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

}

在 TestEmployee 类中,我编写了以下代码:

package com.mmi.education;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class TestEmployee {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        AnnotationConfiguration config= new AnnotationConfiguration();
        config.configure("hibernate.cfg.xml");

        SessionFactory factory = config.buildSessionFactory();

        Session session = factory.getCurrentSession();
        //session.beginTransaction();
        Query query = session.createQuery("FROM Employee");

        List<Employee> employees = query.list();

        for(Employee employee:employees){
            System.out.println("ID=>"+employee.getId()+"\tFirstName=>"+employee.getFirstname()+"\tLastName=>"+employee.getLastname());
        }
    }

}

首先,我很困惑是写“FROM EMPLOYEES”还是“FROM Employee”。其次,在POJO类(Employee)中声明这两个变量是否安全,而表中有很多列。

最后,在执行代码时,我面临以下异常:

Exception in thread "main" org.hibernate.hql.ast.QuerySyntaxException: Employee is not mapped [FROM Employee]

我的数据库是本地安装的(Oracle 10g XE)

4

1 回答 1

1

HQL 仅使用实体、映射属性和关联。从不表和列。所以正确的查询是from Employee

如果您不映射实体中的所有表列,则表中的每次插入和更新都将完全忽略其他列。这意味着它们将保留其默认值或当前值。

您得到的异常 IIRC 意味着您只是忘记将实体添加到休眠配置文件中的映射实体列表中。

于 2012-10-23T11:42:29.090 回答