2014-02-25 51 views
0
CREATE TABLE EMPLOYEE (
EMP_ID INTEGER(5) PRIMARY KEY DEFAULT 1, 
EMP_NAME VARCHAR(30) NOT NULL 

); 

CREATE TABLE PHONENUMBER (
PH_NUMBER VARCHAR(10) NOT NULL, 
PH_NUMBER_TYPE VARCHAR(10), 
EMP_ID INTEGER(5) NOT NULL, 
FOREIGN KEY (EMP_ID) REFERENCES EMPLOYEE (EMP_ID) 
); 

加入限制我有两个类雇员作为实体类休眠标准:上收集

public class Employee{ 
    private int empId; 
    private String empName; 
    private Set<PhoneNumber>phNoSet; 
} 

和PhoneNumber作为值类

public class PhoneNumber{ 
    private String phoneNo; 
    private String phNoType; 
} 

下面是雇员和PhoneNumber休眠之间XML映射。

​​

使用Hibernate,当我访问雇员与EMP_ID =“101'.I得到PHONENUMBER table.But我需要PHONENUMBER只表项中的所有条目,其中ph_number_type =”住宅”与EMP_ID员工=‘101’ 。

我试过下面的方法,但没有成功。

List results = session.createCriteria(Employee.class) 
       .add(Restrictions.eq("empId", 101)) 
       .createCriteria("phNoSet") 
       .add(Restrictions.eq("phNoType", "residential")) 
       .list(); 

我该如何实现它?

回答

0

这可以足够了:

List results = session.createCriteria(Employee.class) 
       .add(Restrictions.eq("empId", 101)) 
       .add(Restrictions.eq("phNoSet.phNoType", "residential")) 
       .list(); 

List results = session.createCriteria(Employee.class) 
       .add(Restrictions.eq("empId", 101)) 
       .createAlias("phNoSet", "p") 
       .add(Restrictions.eq("p.phNoType", "residential")) 
       .list();