2012-10-26 109 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 –