Hibernate HQL 级联查询

类的关系如下:

public class Object1 {
 private Object2 object2;
 private Object3 object3;
 private String name;

 public Object1() {
 }

 public Object1(Object2 object2, Object3 object3, String name) {
  this.object2 = object2;
  this.object3 = object3;
  this.name = name;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public Object2 getObject2() {
  return object2;
 }

 public void setObject2(Object2 object2) {
  this.object2 = object2;
 }

 public Object3 getObject3() {
  return object3;
 }

 public void setObject3(Object3 object3) {
  this.object3 = object3;
 }
}

/****************************************************************/

 

public class Object2 {
 private String name;

 public Object2() {
 }

 public Object2(String name) {
  this.name = name;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }
}

 

/***************************************************************/

 

public class Object3 {
 private String name;
 private Object4 object4;

 public Object3() {
 }

 public Object3(String name,Object4 object4) {
  this.name = name;
  this.object4=object4;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public Object4 getObject4() {
  return object4;
 }

 public void setObject4(Object4 object4) {
  this.object4 = object4;
 }
}

 

/*************************************************/

 

public class Object4 {
 private String name;

 public Object4() {
 }

 public Object4(String name) {
  this.name = name;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }
}

 

具体的操作方法:

public Map<String, Object> queryObjectByCriteria(Object1 object1,
   int start, int limit) {
  Map<String, Object> map = new HashMap<String, Object>();
  try {
   Criteria criteria = this.getSession().createCriteria(Object1.class);
   if (object1 != null) {
    if (object1.getObject2() != null) {
     criteria.add(Restrictions.gt("object2.name", "object2"));
    }
    if (object1.getObject3() != null) {
     // 将criteria扩展到Object3这一级别
     criteria = criteria.createCriteria("object3");
     if (object1.getObject3().getName() != null) {
      if (!object1.getObject3().getName().equals("")) {
       criteria.add(Restrictions.eq("name", object1
         .getObject3().getName()));
      }
     }
     if (object1.getObject3().getObject4() != null) {
      if (!object1.getObject3().getObject4().getName()
        .equals("")) {
       criteria.add(Restrictions
         .eq("object4.name", object1.getObject3()
           .getObject4().getName()));
      }
     }
    }
   }
   // 得到总记录条数
   Integer i = (Integer) criteria
     .setProjection(Projections.rowCount()).uniqueResult();
   Long totalResults = Integer.valueOf(i).longValue();
   map.put("count", totalResults);
   criteria.setProjection(null);
   criteria
     .setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
   // 设置分页
   criteria.setFirstResult(start);
   criteria.setMaxResults(limit);
   List list = criteria.list();
   map.put("items", list);
   return map;
  } catch (RuntimeException re) {
   throw re;
  }
 }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值