所以我可以通过Hibernate传递公司ID来获取公司信息,代码如下:
public Company getCompanyById(Integer companyId) {
Company company = (Company) getCurrentSession().get(Company.class, companyId);
return company;
}
现在我要做的是传递公司名称,地址和手机号码以获得公司。我心中的方法是这样的:
public Company getCompanyByNameAddressCellphone(String companyName, String address, Integer cellPhoneNumber);
如何实施?
答案 0 :(得分: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#like
或Restrictions#ilike
(不区分大小写的版本)。
答案 1 :(得分: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等)用于查询而不是DB列名称,您的代码不应该知道这些名称。
我个人偏好是DetachedCriteria。与Restrictions API一起使用,您可以完成大约85%的查询需求。 DetachedCriteria的执行流程略有不同,并在此处记录: https://docs.jboss.org/hibernate/core/3.3/reference/en-US/html/querycriteria.html#querycriteria-detachedqueries