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 が null であるという例外がスローされます。

次に、このクエリを使用しました

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

最初のレコード以外のレコードを取得します。

ID は主キーで、managerid は Employees テーブル (id) フィールドを指す外部キーです。すべての行に ID が存在しますが、一部の行または 1 つの行に managerid が null に設定されています。

私の質問は、最初のレコード managerid が null に設定されている場合でも、すべてのレコードを取得する方法です。

私がしなければならなかった設定は何ですか?

4

1 に答える 1

0

まず第一に、休止状態のエンティティでは、テーブルに主キー列が必要であり、null ではない必要があります。それ以外の場合、休止状態は主キーを使用してエンティティを処理するため、エンティティを処理できません。そのため、null の主キーは休止状態になると混乱するため、許可されません。

とにかくデータをフェッチしたい場合は、休止状態を使用してネイティブクエリを起動できます。

ネイティブクエリリファレンス: http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querysql.html

于 2012-10-26T08:42:26.080 に答える