大家好我在Customer实体中有这个映射:
@OneToOne(cascade={javax.persistence.CascadeType.ALL})
@JoinColumn(name="address")
private Address address;
然后我在DAO课程中使用了这个方法:
@SuppressWarnings("unchecked")
public List<Customer> getCustomersFromThisAddress() throws Exception{
sessao = null;
try{
sessao = HibernateUtil.getSessionFactory().openSession();
Customer customer= new Customer();
Criteria criteria = sessao.createCriteria(customer.getClass())
.createAlias("address", "a")
.add(Restrictions.ilike("a.area", "bedford"));
return (List<Customer>) criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();
} catch (Exception e) {
return null;
} finally {
sessao.close();
}
}
我想从贝德福德地区返回所有客户......我是Hibernate和Criteria的新手,请帮忙。
答案 0 :(得分:1)
使用ilike
时,您必须记住两件事:
a)底层数据库必须能够支持它或具有等效功能。
b)如果没有为第二个参数指定MatchMode
或添加%
符号,那么您的语句只是不区分大小写的等号。
因此,如果您要搜索仅包含bedford
字符串的文本,请使用以下其中一项:
.add(Restrictions.ilike("a.area", "%bedford%"));
或
.add(Restrictions.ilike("a.area", "bedford", MatchMode.ANYWHERE));
答案 1 :(得分:0)
我得到一个空列表&#39; []&#39;我意识到我在.add(限制......行)中犯了一个错误! &#39;区域&#39;地址表中的列数据全部记录为&#39;贝德福德&#39; ..
阅读本文后:https://www.tutorialspoint.com/hibernate/hibernate_criteria_queries.htm
我发现我只需要改变
Criteria criteria = sessao.createCriteria(customer.getClass())
.createAlias("address", "a")
.add(Restrictions.ilike("a.area", "bedford"));
到
Criteria criteria = sessao.createCriteria(customer.getClass())
.createAlias("address", "a")
.add(Restrictions.like("a.area", "bedford"));
返回我的清单...希望这会有助于其他人!!