0

我在休眠状态下从具有以下列的员工表中进行了选择查询:

private int id;
    private String firstname;
    private String lastname;
    private String email;
    private String phoneno;
    private Date hiredate;
    private Jobs jobid;
    private Integer salary;
    private Integer commpct;
    private Employee managerid;
    private Departments deptid;

在这张表上,第一条记录的managerid设置为null,之后每条记录的managerid设置为第一条记录employeeid;

当我使用查询从员工表中选择数据时:(“FROM EMPLOYEES”)使用以下代码:

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()
                    +"\temail=>"+employee.getEmail()+"\tPhoneNO=>"+employee.getPhoneno()+"\tHireDate=>"+employee.getHiredate()
                    +"\tJob=>"+employee.getJobid().getJobtitle()+"\tMax Salary=>"+employee.getJobid().getMaxsalary()
                    +"\tPresent Salary=>"+employee.getSalary()+"\tCommission %=>"+employee.getCommpct()+"\tManager=>"+employee.getManagerid().getFirstname()+","+employee.getManagerid().getLastname()
                    +"\tDepartment ID=>"+employee.getDeptid().getName());

        }

异常抛出 bcoz 第一条记录 managerid 为空,

然后,我使用了这个查询

Query query = session.createQuery("FROM Employee em WHERE em.managerid IS NOT NULL AND em.deptid IS NOT NULL");

我得到了第一个记录以外的记录。

ID 是主键,managerid 是指向员工表 (id) 字段的外键。所有行都有 id,但有些行/一行的 managerid 设置为 null。

我的问题是即使第一个记录 managerid 设置为空,如何获取所有记录?

我必须进行什么设置?

4

1 回答 1

0

首先,在休眠实体中,表中必须有主键列并且它必须不为空。否则休眠无法处理实体,因为它使用主键处理它们。所以空主键会混淆休眠,所以不允许。

如果您想获取数据,您可以使用休眠触发本机查询。

本机查询参考:http ://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querysql.html

于 2012-10-26T08:42:26.080 回答