如若筛选条件是多个实体类的字段组成的,则可以使用createAlias关联相关的实体类,进行查询。
例如:
@SuppressWarnings("unchecked")
public PaginationQuery<Product> list(ProductDto productDto, Page page) {
Criteria criteria = this.getCurrentSession().createCriteria(Product.class,"p")
.createAlias("document","d").createAlias("customer","c");
if(productDto != null){
if(StringUtils.isNotBlank(productDto.getWorkOrdeName())){
criteria.add(Restrictions.like("p.workOrderName", "%" + productDto.getWorkOrdeName() + "%"));
}
if(productDto.getDeployStatus() != null && productDto.getDeployStatus().length != 0){
List<Integer> statusList = Arrays.asList(productDto.getDeployStatus());
criteria.add(Restrictions.in("p.status", statusList));
}
//关联document
if(StringUtils.isNotBlank(productDto.getStartTime())){
try {
Date startTime = df.parse(productDto.getStartTime());
criteria.add(Restrictions.ge("d.documentStatTime", startTime));
} catch (ParseException e) {
log.error("开始时间转换异常", e);
}
}
if(StringUtils.isNotBlank(productDto.getEndTime())){
try {
Date endTime = df.parse(productDto.getEndTime());
criteria.add(Restrictions.le("d.documentStatTime", endTime));
} catch (ParseException e) {
log.error("结束时间转换异常", e);
}
}
//关联customer
if(StringUtils.isNotBlank(productDto.getCustomerName())){
criteria.add(Restrictions.eq("c.name", productDto.getCustomerName()));
}
}
if(page != null){
//总条数
List<Product> list = criteria.list();
if(list != null){
int total = list.size();
page.setRecordCount(total);
}
//分页
criteria.setMaxResults(page.getSize());
criteria.setFirstResult(page.getIndex()*page.getSize());
}
criteria = criteria.addOrder(Order.desc("p.createTime"));
PaginationQuery<Product> paginationQuery = new PaginationQuery<>();
paginationQuery.setPlist(criteria.list());
paginationQuery.setPage(page);
return paginationQuery;
}
如若筛选条件就是一个实体类的字段,而查询的字段是多个实体类的字段,则可用setFetchMode进行查询。
例如:
@SuppressWarnings("unchecked")
public Customer getByName(String name) {
Criteria criteria = this.getCurrentSession().createCriteria(
Customer.class);
if (StringUtils.isNotEmpty(name)) {
criteria.add(Restrictions.eq("name", name));
}
criteria.add(Restrictions.eq("enable", true));
criteria.setFetchMode("strategies", FetchMode.SELECT);
List<Customer> customers = criteria.list();
if (customers != null && customers.size() > 0) {
return customers.get(0);
}
return null;
}