Hibernate多表联合查询解决办法

转载 2006年06月07日 16:03:00

Hibernate多表联合查询解决办法

[ 2006-3-31 14:40:50 | By: 王宇飞 ]

用Hibernate可能都会遇到这样的问题:多表联合查询返回的集合不能按通常的方式遍历,现将我的解决办法和大家分享一下,如果哪位有更好的办法请不吝赐教,谢谢!

 

/**
*制定一个类,该类的对象属性 obMap 将查询得到的每个字段的值存贮
*/

import java.util.TreeMap;

public class ListObject {
 private TreeMap   obMap;

 public TreeMap  getObMap() {
  return obMap;
 }

 public void setObMap(TreeMap  obMap) {
  this.obMap = obMap;
 }
}

 

  /**
  * 该类的对象将调用Session对象的方法对数据库进行各种操作
  */ 

public class ObjectHibernate{

................................................

  /**
  * 按条件查询记录(第一条记录位置,每次查询记录数)
  */
 public List findObject(int firstResult, int maxResults) {
  Session session = HibernateSessionFactory.currentSession();
  Transaction transaction = null;
  try {

   String strSql="select t.orderlistId ,t1.orderId,t1.orderTime," +
    " t.orderGoodsName ,t.orderGoodsCount from Orderlist t,Order t1 "+
    " where t.orderId=t1.orderId";
   transaction = session.beginTransaction();
   Query query = session.createQuery(strSql);
   if (query != null && query.list() != null
     && query.list().size() > 0) {
    query.setFirstResult(firstResult);
    query.setMaxResults(maxResults);
    transaction.commit();
    session.flush();

    List list=query.list();

    List list1=new ArrayList();      //该集合将封装后的ListObject存贮,并返回

   if (list != null && list.size() > 0) {
      Iterator it = list.iterator();
      ListObject lo = null;
      TreeMap  treeMap = null;
      while (it.hasNext()) {
       Object ob[] = (Object[]) it.next();
       treeMap = new TreeMap();
       for (int i = 0; i <ob.length; i++) {
         lo = new ListObject();
         treeMap.put(new Integer(i), ob[i]);
       }
    lo.setObMap(treeMap);
    list1.add(lo);
   }


    return list1; 
   } else {
    transaction.commit();
    session.flush();
    return null;
   }
  } catch (HibernateException e) {
   if (transaction != null)
    transaction.rollback();
   log.error(e);
   return null;
  } finally {
   if (session != null) {
    try {
     session.close();
    } catch (HibernateException e) {
     log.error(e);
     throw new RuntimeException(e);
    }
   }
  }
 }

..........................................................

 }

 

 

在Action中获得 ObjectHibernate类对象的 findObject(int firstResult, int maxResults)方法的返回值,并将该返回值放在HttpServletRequest中,取名为 ‘objectList’

 

 

 

 

 页面遍历 ListObject对象,并遍历其属性obMap(我用struts标签了)

..................................

   <logic:empty name="objectList">
       没有记录!!!
      </logic:empty>
   <logic:notEmpty name="objectList">
    <logic:iterate id="orderList" name="objectList">
     <tr>
      <logic:iterate id="oValue" name="orderList" property="obMap">
       <td>
        <bean:write name="oValue" property="key" />
        =
        <bean:write name="oValue" property="value" />
       </td>
      </logic:iterate>
     </tr>
    </logic:iterate>
   </logic:notEmpty>

Hibernate 多表查询结果集的处理

Hibernate 是JDBC的轻量级封装,一款杰出的ORM框架。通过它,可以建立数据表与表对象间的联系。               Hibernate的查询可通过HQL 和Criteira实现。...
  • sun8288
  • sun8288
  • 2012年10月31日 13:54
  • 14094

hibernate实现多表联合查询

hibernate实现多表联合查询  (2012-06-10 21:37:28) 转载▼ 标签:  联合查询   对象联合查询 分类: ssh ...

Hibernate中关于多表连接查询hql 和 sql 返回值集合中对象问题

昨晚帮同事看代码到凌晨2点多,今早6点醒来发现他发来信息说报空指针错误,实在无法入睡,起来自己测试了一下,控制台还真的报: 2009-4-25 8:12:34 org.apache.catali...

Hibernate中表与表之间关系的处理(一对多)

hibernate JAVAEE 一对多

利用java反射将结果集封装成为对象和对象集合

java反射机制 结果集封装为对象和对象集合
  • alleged
  • alleged
  • 2017年05月25日 14:37
  • 604

hibernate多表联合查询

  • 2012年05月11日 09:04
  • 37KB
  • 下载

hibernate实现多表联合查询

http://blog.sina.com.cn/s/blog_67b9ad8d01010by1.html 以前用sql实现联合查询 是非常简单的事,只需要写sql语句就可以,第一次遇...

hibernate实现多表联合查询

以前用sql实现联合查询 是非常简单的事,只需要写sql语句就可以,第一次遇到hibernate要实现多表联合查询的时候还楞了一下。最后看了下资料,才恍然大悟,hibernate实现多表联合查询跟SQ...

hibernate多表联合查询

//三表联合查询 /* * select t.* from product t,category c,categorysecond cs ...

hibernate实现多表联合查询

以前用sql实现联合查询是非常简单的事,只需要写sql语句就可以,第一次遇到hibernate要实现多表联合查询的时候还楞了一下。最后看了下资料,才恍然大悟,hibernate实现多表联合查询跟SQL...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate多表联合查询解决办法
举报原因:
原因补充:

(最多只允许输入30个字)