2012-10-26 104 views
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; 

在该表中, 第一个记录有经理ID设置为NULL,之后每一条记录经理ID设为首先记录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第一记录经理ID为空,

然后,我用此查询

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

我得到第一条记录以外的记录。

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

我的问题是如何获得所有记录,即使第一条记录managerid设置为空?我不得不做什么设置?

回答

0

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

如果您想反正抓取数据,您可以使用hibernate激发本机查询。

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

+0

我已编辑问题。请看看它。 –

+1

哦,好的。这是hibernate中内部与外部连接的经典案例。在这种情况下,你的答案在这篇文章中:http://stackoverflow.com/questions/1525098/hibernate-default-joining-for-nullable-many-to-one –