2015-07-20 40 views
1

所以我能夠在公司ID通過使用Hibernate獲得公司信息,代碼如下:Hibernate實現由通在不同類型則params的

public Company getCompanyById(Integer companyId) { 
    Company company = (Company) getCurrentSession().get(Company.class, companyId); 
    return company; 
} 

現在我所要做的是通過在公司名稱,地址和手機號碼,以獲得公司。在我腦海中的方法是這樣的:

public Company getCompanyByNameAddressCellphone(String companyName, String address, Integer cellPhoneNumber); 

我該如何實現它?

+1

使用Hibernate查詢數據庫的多個途徑 - HQL查詢,標準的API,SQL查詢 –

+0

@SubhrajyotiMajumder您可以發佈這個詳細的回答? – OPK

+1

Hibernate文檔[鏈接](https://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/index.html) - 1. [HQL](https://docs.jboss。 org/hibernate/orm/4.3/manual/en-US/html/ch16.html)2. [Criteria API](https://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html /ch17.html) 3. [SQL](https://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch18.html) –

回答

1

您可以使用Hibernate Criteria來實現這一點。它看起來是這樣的:

public Company getCompanyByNameAddressCellphone(String companyName, String address, Integer cellPhoneNumber) { 
    Criteria criteria = getCurrentSession().createCriteria(Company.class); 
    criteria.add(Restrictions.eq("companyName", companyName)); 
    criteria.add(Restrictions.eq("address", address)); 
    criteria.add(Restrictions.eq("cellPhoneNumber", cellPhoneNumber)); 
    return criteria.uniqueResult(); 
} 

在這種情況下,提供給Restrictions#eq呼叫字符串值是您的公司實體的屬性名稱。

如果您不想匹配確切的字符串值並且更喜歡使用like,則可以使用Restrictions#likeRestrictions#ilike(不區分大小寫的版本)。

1

您可以使用Criteria/DetachedCriteria或HQL。一個Criteria實例或一個Query實例都可以從會話中檢索(在您的示例中由相同的getCurrentSession()調用引用)。

不知道你正在使用什麼版本的Hibernate的,但這裏是有關查詢的文檔:https://docs.jboss.org/hibernate/core/3.3/reference/en-US/html/objectstate.html#objectstate-querying

的關鍵點是,你的屬性名稱(Company.name,Company.address等)用於查詢而不是數據庫列名,不應該期望您的代碼知道。

我個人的偏好是DetachedCriteria。與限制API一起使用,您可以完成大約85%的查詢需求。 DetachedCriteria之後的執行流程略有不同,在這裏記錄: https://docs.jboss.org/hibernate/core/3.3/reference/en-US/html/querycriteria.html#querycriteria-detachedqueries

相關問題