2013-08-30 59 views
0

我有以下模式:加入標準很好......但是如果我想添加一個條件?

TABLE EMPLOYEE   TABLE COUNTRY 
---------------   --------------- 
id     |------> id 
name    |  country_name 
country_id ------|  country_code 

如果我想檢索所有屬於一個國家,我用一個標準像這樣的員工:

Criteria crit = getSession().createCriteria(Employee.class); 
crit.add(Restrictions.eq("country.id", countryId)); 
List<Employee> employees = crit.list(); 

我的員工實體是指國家在這方式:

@Entity 
public class Employee { 
    private static final long serialVersionUID = 1L; 

    @Id 
    private Integer id; 

    @ManyToOne 
    @JoinColumn(name="country_id") 
    private Country country; 

    // Other stuff here 
} 

這裏的一切正常!

問題是如果我不知道countryId,但我有country_code(而不是英國)。我應該如何更改上述標準,以便我可以加入表格並在國家代碼上添加限制條件?

+0

您可以在值,如果其他人使用(即,如果空白),幷包括crit.add(Restrictions.eq(「country.id」,countryId)),取決於條件的結果。 – Davos555

回答

0
 Criteria criteria = getSession().createCriteria(Employee.class,"e"); 
    criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 
    criteria.createAlias("e.country", "c");   
    Criterion codeId= Restrictions.eq("c.id", yourCountryId); 
    Criterion codeCriterion= Restrictions.eq("c.countryCode", yourCountryCode); 
    criteria.add(Restrictions.or(codeId, codeCriterion)); 

    List<Employee> employees = criteria.list(); 

OR

Criteria criteria = getSession().createCriteria(Employee.class); 
    Criterion codeId = Restrictions.eq("country.id", yourCountryId); 
    Criterion codeCriterion = Restrictions.eq("country.countryCode", yourCountryCode); 
    criteria.add(Restrictions.or(codeId, codeCriterion)); 

    List<Employee> employees = crit.list() 
+0

更新了答案 – Prabhakaran

0

你可以這樣做,簡單的添加,如果其他

Criteria crit = getSession().createCriteria(Employee.class); 

if(StringUtils.isNotBlank(countryId)) 
    crit.add(Restrictions.eq("country.id", countryId)); 
else 
    crit.add(Restrictions.eq("country.code", countryCode)); 

List<Employee> employees = crit.list(); 
相關問題