Hibernate中离线查询DetachedCriteria案例

Hibernate中离线查询经常用到。
问题:但当查询条件并不仅仅涉及到一个实体,而是还含有关联的实体中的属性时,就不知道怎么弄了。自己摸索了好久才发现原来API中已经提供了相应的解决方法。

情况1:
涉及到一个实体

查询条件涉及到的是Goods,如果查询时查询的是Goods表,那简单了
Service层
public List<History> findByCondition(Goods goods) {
	DetachedCriteria dc=DetachedCriteria.forClass(History.class);
	if(goods().getNm()!=null){
		dc.add(Restrictions.like("nm", "%"+goods().getNm()+"%"));
	}
	……
	return goodsDao.findByDetached(dc);
}

情况2:
但实际情况是:这是查询出入库操作历史的查询页面,所以Action中使用模型驱动时的 Model是History而非Store了,尽管这些参数最终还是封装到了History关联的Goods中。自然的传到Service层时的参数就不是上面代码中的Goods了,而是History了。这是就要用到”取别名“方式了。
public List<History> findByCondition(History history) {
	DetachedCriteria dc=DetachedCriteria.forClass(History.class,"h");//别名:History对应h
	dc.createAlias("h.goods", "g");//别名:Goods对应g
	dc.createAlias("h.goods.store","s");//别名:Store对应s
	if(history.getGoods().getNm()!=null){
		dc.add(Restrictions.like("g.nm", "%"+history.getGoods().getNm()+"%"));
	}
	if(history.getGoods().getName()!=null){
		dc.add(Restrictions.like("g.name", "%"+history.getGoods().getName()+"%"));
	}
	if(history.getGoods().getStore()!=null){
		dc.add(Restrictions.like("s.id", "%"+history.getGoods().getStore().getId()+"%"));
	}
	return historyDao.findByDetached(dc);
}

转载于:https://my.oschina.net/javandroid/blog/878293

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值