Sql 在hibernate中选择空字段

Sql 在hibernate中选择空字段,sql,oracle,hibernate,Sql,Oracle,Hibernate,我在hibernate中从包含以下列的employees表中进行了select查询: private int id; private String firstname; private String lastname; private String email; private String phoneno; private Date hiredate; private Jobs jobid; private Integer salary;

我在hibernate中从包含以下列的employees表中进行了select查询:

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

当我使用以下代码使用query:(“from employees”)从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());

        }
我得到的不是第一张唱片

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

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


我必须做什么设置?

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

如果要获取数据,可以使用hibernate启动本机查询


本机查询引用:

Ohh ok。这是hibernate中内部连接与外部连接的经典案例。在这种情况下,您的答案如下:
Query query = session.createQuery("FROM Employee em WHERE em.managerid IS NOT NULL AND em.deptid IS NOT NULL");